SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

データサイエンス基礎を高校数学から復習

データサイエンス基礎を高校数学から復習しよう! D3.jsでデータを表現する

データサイエンス基礎を高校数学から復習しよう 第1回

  • X ポスト
  • このエントリーをはてなブックマークに追加

 データサイエンスという分野は、データ収集や可視化などが身近になったことで、より重要になってきています。システムを使ってデータ分析する際、利用者は最終的な結果のみを求めますが、私たちエンジニアはその途中経過についても正しく評価する必要があります。そのためには、中学や高校で学んだ数学の知識が欠かせません。そこで本連載は、高校までに学ぶ基本的な数学知識を使って、データ分析やデータ表現の基礎的な考え方を紹介します。また、既に学んだ数学的基礎からデータの特徴を見つけるためにデータ表現する方法について紹介したいと思います。

  • X ポスト
  • このエントリーをはてなブックマークに追加

はじめに

 コンピュータでのデータ分析といっても多種多様で、画像や音声、映像、文章などを対象にする場合もあれば、売上値や検査値などの数値を分析する場合もあります。最近では、AIによってさまざまなデータが扱いやすくなり、利用者にとって分かりやすく結果を提示できるようになっています。

 その反面、分析の過程についてはわかりにくくなり、エンジニアはデータを抽象化しイメージできる能力、つまり、頭の中でおおよそのデータを示す図が描ける力が今後求められていくでしょう。そこで、本連載では、数式からデータ特性をイメージできるようになることを目指して、中学・高校で学ぶ基礎数学を説明したいと思います。

対象

  • 数学が苦手と感じている、もしくは復習したいと思っているエンジニア
  • データ分析を始めたいと思っているエンジニア
  • データビジュアライゼーション(データのグラフ化)を行うエンジニア

データを見る流れ

 「データを抽象化しイメージする」もしくは「数式からデータ特性をイメージできる」といってもどういうことなのか、よく分からないかもしれません。そこでまずは、具体的な例として「複数の店舗を持つ企業の販売を改善する過程」を用いて、分析の流れを説明したいと思います。

データ分析の流れ

 データを分析する場合、まずは、データ間の関係を見つける必要があります。

 例えば、売上と顧客の年齢の調査結果であれば、簡単にグラフ化し傾向を確認できます。この場合、2つに関係性がある前提で、データ分析していることになります。

 しかし、一般的なデータ分析においては、「売上に関する属性の何か」と「顧客に関する属性の何か」に関係性があるか、あるとしたらどのような傾向かを発見することが求められます。ここで言う「属性の何か」とは、「店舗ごとの購入単価」「1日の購入額合計」「年齢」「自宅までの距離」といった情報はもちろん、「天気」などの直接的に関係がないものも含まれます。

 そして、図1のように集められるデータをできるだけ集め、それらの関係と傾向を探し結果を提案するまでを、システム側に求められることもよくあります。

図1:データ分析の流れの一例
図1:データ分析の流れの一例

 入出力は人が確認できますが、その途中データの状況がわからないと、結果が正しいのか判断できません。画像や動画認識では、コンピュータ内で扱いやすく計算した結果の値からその特徴を見ることを「コンピュータビジョン(CV)」と言います。多くの数値分析において、そのコンピュータビジョンに相当するのが「数式」です。

データの特徴を探す

 例えば、「使った金額(Y軸)」と「自宅までの距離(X軸)」のデータを調べたときに、図2の結果になったとします。

図2:ある調査結果のデータ例
図2:ある調査結果のデータ例

 この例では、直観的に「2つの比例直線が引ける」ことが見て取れます。ですが、この関係を計算によって見つけたい場合は、どうすればよいでしょうか。ここでの変数は「距離」しかないので、比例関係である「y = ax + b」で示せるはずです。平均値を用いると、図3のようになります。

図3:データ上に2つの比例直線を示した図
図3:データ上に2つの比例直線を示した図

 この結果を用いて販促キャンペーンを行うと、店舗の近くから来る顧客では成功しても、遠方の単価が高い顧客は逃してしまうかもしれません。

コンピュータでデータを見る場合の課題

 コンピュータ上でデータを扱う場合、このように異なる複数のルールを扱うのは大変です。また、複数のルールを見つけたとしても、実際に特定の値に対する結果が2つ以上になる場合、その後の扱い方も難しくなります。そのため、ルールを1つに限定した方が判断がしやすいでしょう。

 一方、それだけでは人間の感覚と異なることもあります。またルールが見つからないと、そもそもの目的が達成できません。その場合、軸となる項目の取り方が間違っていることを疑う必要があります。その際、人がさまざまなデータから関係を探すやり方と、コンピュータの計算によって関係を探す場合での違いを、図4のように意識する必要があります。

図4:人間とコンピュータでデータを見る際の違い
図4:人間とコンピュータでデータを見る際の違い

 例えば、人間は曖昧な全体情報から個別の関係を探せますが、コンピュータはあいまいな関係を扱うことができないため、常に具体的な数値と明確なルールが必要です。このルールは高度になればなるほど複雑化していきますが、いかなる場合も明確な論理(ロジック)が存在します。そこでコンピュータが扱っているデータ感覚をつかむには論理的な数学の考え方に慣れる事が役立ちます。

数式から見える仮説

 先ほどのデータの関係は図5のように2つの一次関数の直線が引けます。

図5:データ上に2つの比例直線を示した図
図5:データ上に2つの比例直線を示した図

 人間から見た場合、2つ線が引けるということは、係数aには2つの場合があるという考え方をするはずです。しかし、それではこの2つの値に一次関数の関係は成立しません。ここで改めて、一次関数、つまり「y = ax + b」の意味を見直してみます。

図6:一次関数の意味
図6:一次関数の意味

 この一次関数を「連続した数値データ」だとみなしていると気がつきにくいのですが、「xはaと関係が深く、bとは無関係である」ことも意味しています。数学上、掛け算(割り算)は「関係性」が高いことを示し、足し算(引き算)はその関係性が低いことを示します。

 そして、掛け算は扱いやすいということを学ぶために、中学数学以来「因数分解」を幾度となくやってきたことを思いだしてください。「因数分解」とは読んで字のごとく、要「因」の「数」に「分解」することです。つまり、掛け算の中に要因が複数存在する可能性があり、その特徴が消えずに残っていることを意味しています。

 つまり、図7のように「ax」の「x」が純粋な「店舗から自宅までの距離」という要因を示す変数ではなく、まだ隠れた因子が含まれている可能性が高いと言う事を意味していることになります。

図7:axが内包する因子
図7:axが内包する因子

データ分析の難しさと今後について

 さて、ここからその隠れた因子を見つけるには……と進めたいところですが、難解でもあります。大学などで学ぶ「解析学」の知識が必要であり、高校数学より高度になってきます。

 一方、そういった難しい学問を知らなくても、コンピュータでは総当たりや、人の経験則でルールを予測できます。つまり、専門知識を知らなくてもその他の因子を探すことができるのです。例えば、先ほどの例では「夏物セール」と「冬物セール」を行った時の結果などの情報があれば、「季節」という要因が隠れていることがわかります。

 今後、AIサービスなどがより使いやすく普及していけば、このような高度な類推を要求される部分はAIに置き換わる可能性もあります。そして、その結果を用いてどのような表現、もしくは結論を導くのかが今後、より多くのエンジニアに求められるようになるのかもしれません。

本連載で目指すこと

 さて、前置きが長くなってしまいましたが、本連載で目指すのは、数式からデータ特性をイメージできるようになることです。つまり、数式から具体的な図をイメージ出来るようになれば、その途中経過が完全にわからなくても全体像をイメージしやすくなるはずです。中学や高校の数学では、一般的に数式から結果を求めるケースが多かったはずです。そのため、値(データ)から見た時の数式という視点を求められる機会はあまりなかったかもしれませんが、この連載の中で徐々に身につけていきましょう。

次のページ
データを表現する(データビジュアライゼーション)

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
この記事の著者

WINGSプロジェクト 小林 昌弘(コバヤシ マサヒロ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/21068 2025/03/14 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング