データ分析や機械学習で何をするか？ 必要とされる知識は？

# データ分析や機械学習で何をするか？ 必要とされる知識は？

* データ分析や機械学習では結局何をするのか？
* 何が難しいのか？
* どのような知識を得ねばならないのか？

といったことについて自分の考えをまとめる。

## 参考文献

* [変わりゆく機械学習と変わらない機械学習](https://www.jps.or.jp/books/gakkaishi/2019/01/74-01seriesAIphys2.pdf)

## 前提

本文章は、上記の参考文献や私の大学時代の研究、知り合いのデータ分析企業での経験、僅かながらのデータ分析業務への関わりから感じることや考えをまとめたものである。(これが正しいという保証があるものではなく、あくまで私の考えである)

## データ分析から機械学習による予測までのステップ

以下の3ステップに分ける。

1. 予測対象の明確化とデータ分析
1. 仮説の定義と検証
1. 機械学習による予測

## 1. 予測対象の明確化とデータ分析

AIを開発するためのデータ分析から機械学習の一連の業務の中で、最も重要なステップがここである。

何らかの予測をするために機械学習を行うわけであるが、取得したデータにそもそも予測を可能にする情報が含まれているか？ といった問いに答えるのがこのステップである。

機械学習の手法は魔法ではない。入力データの中に予測に必要な情報が含まれていなければ、どんな機械学習の手法であっても、精度の高い予測性能を得ることはない。したがって、「取得したデータの分析をせずにとりあえず機械学習の手法を試してみる」というのは無駄である。(手法によってはあまりに無駄が大きい)

このステップで取得したデータの性質を十分に知り、予測したい対象や目的を明確にできれば、その後のステップの難易度は格段に下がるはずだ。

このステップでは具体的には以下の2つを行う。

1. 予測対象の明確化
1. データ分析
   * データの取得元となる情報システムや業務システムに対する理解。
   * 基礎的な統計量の取得
      * 平均や分散、相関係数といったデータの特徴を示す基礎的な統計量を取得する。
   * グラフによる可視化
      * 統計量ではわからないデータの具体的な分布や性質を把握するために行う。
   * その他、データの特徴の把握
      * 季節変動がないか？
      * 天候や自然災害などから異常なデータが取得された時期がないか？


「データの取得元となる情報システムや業務システムに対する理解」とは、ドメイン知識を得ることである。ドメイン知識とは、データの取得元となる情報システムや業務システム、その業界の知識といった予測に関連する幅広い知識を指す。そのような知識を学ぶことは、プログラミングの好きなエンジニアには苦しい作業だろう。しかしながらこれが重要であるのだ。データの意味するところを知る、具体的にいえば特定のテーブルの特定のカラムは何を意味するのか？ 予測対象の情報はどのテーブルを見ればよいのか？ といった問いに答えるには、このような知識が必要だからだ。

そして重要なことは、「データ分析」は「現状分析」であることだ。「現状分析」は「目標を決めるのに必要不可欠な作業」である。取得データから各種の統計量を取得したり、グラフで可視化したりといった作業は、現状を知る作業にほかならない。それによって得られた情報は、予測対象の明確化に直接的に影響するのである。

具体的な例あげる。業務システムから得られたデータを用いて、各支店の売上を予測したいとする。このとき、まず見るのはデータのばらつき(分散や標準偏差)である。おそらく小さな規模の支店は様々な要因の影響をうけやすいため、売上のばらつきが大きいだろう。一方で規模の大きな支店は売上が安定するだろう(ばらつきが小さく、売上の予測が立てやすい)。

こうなったとき、果たして機械学習を用いて支店の売上を予測する意義があるのだろうか？ という疑問が持ち上がる。データを見れば、ある程度の規模の支店の来年の売上は、前年度の売上の前後一、二割の範囲に収まることがわかるかもしれない。そして、今年の売上や退職者の数といったわかりやすい特徴量から、十分な精度の売上の予測ができるかもしれない。結局のところ、小さな支店が大きな支店に成長するのに必要な因子は何なのか？ こそ、知るべき情報(予測対象にするべきものである)であることが判明するかもしれない。

データ分析と予測対象の明確化は対となる。データ分析を深めることで、予測対象を明確化できる。また予測対象を明確にすることで、データ分析は分析の的を絞り、よりよい分析が可能になる。

## 2. 仮説の定義と検証

このステップにおいては、前のステップで得られた知見から一歩踏み込んだ分析をするだろう。例えば、取得したデータから予測対象の予測は可能か？ といった疑問に答えることだ。

例えば売上を予想したい場合、以下のような確認が必要だろう。

1. 売上と相関の高い情報は何か？
1. その情報は、実際の予測環境化でも取得できる情報か？
1. 季節変動が与える影響はどの程度か？

1.については、その情報と売上の相関係数から、機械学習を行った場合の精度に見当をつけられるだろう。どの程度の精度を出すことが目標になるか？ といったことも検討できるだろう。

2.は、注意すべきことである。検証用に取得したデータには、実際の予測環境下では得られない情報が含まれていることがある。これはデータ分析におけるLeakageと呼ばれる問題だ。[Leakage in Data Mining](https://www.cs.umb.edu/~ding/history/470_670_fall_2011/papers/cs670_Tran_PreferredPaper_LeakingInDataMining.pdf)という論文もある。

3.の季節変動は扱いを考慮すべき問題である。例えば、小売店ではブラックフライデーや初売りの時期は普段の何倍もの売上がある。某デパートでは、初売りの売上が年間の売上の3割を占めるという話も聞いたことがある。このような異常とも取れる売上やトラフィック(ECサイトの場合)の増減の扱いは十分に検討する必要がある。

## 3.機械学習による予測

上記のような気の遠くなるようなステップを乗り越えて、ようやく機械学習による予測というステップに到達できる。

ここでも考慮すべき問題は多い。機械学習アルゴリズムが精度の高い予測性能を持つには以下を必要とするからだ。

1. 十分な量の質の良いデータ
1. 予測対象や機械アルゴリズムに見合った計算資源
1. 予測対象に対する適切な最適化アルゴリズムの選定

1.の「質の良いデータを集めること」は大変だ。例えば、新卒で入った従業員が三年後にやめるかどうかの予測をしたいとする。この場合、学習用のデータとしては、三年で辞めた社員のデータと、三年で辞めなかった社員のデータが同じ量存在することが望ましい。だがそのようなデータが存在することはまずない。大体の企業において、三年で辞める社員は少数派であり、ほとんどのデータは辞めなかった社員のものになるからだ。(仮に新卒社員が将来の幹部候補になりえるか？ という予測をするにしても、同様の問題が持ち上がる)

この予測をするには辞めた社員のダミーデータを用意することになる。精度の高い予測をするには、精度の高いダミーデーターを作らねばならない。これは大変な作業である。ダミーデータを作成する手法としてSMOTEなどがあるが、こういった手法によって作成されたデータの特色は予測機の性能にそのまま影響するため、手法について理解を深めることも必要だ。

2.の「予測対象や機械アルゴリズムに見合った計算資源」については、その予想をするには、機械学習アルゴリズムに対する理解が助けとなるだろう。例えばディープラーニングは、学習過程において膨大な量の内部パラーメーターを最適化する。これには大量のデータと計算資源が必要である。長い時間をかけて学習させたとしても、かんばしい結果が得られず、モデルやデータに工夫を施し再度学習を行う、というのはよく聞く話だ。それを考えれば、ディープラーニングのように大量のデータと計算資源を必要とするアルゴリズムは、どうしてもそれを使用しなければならない状況でない限りは避けるのが無難、という考えもあるだろう。

3.の「予測対象に対する適切な最適化アルゴリズムの選定」については、どんな問題に対しても万能な手法は存在しないという説を根拠とする。例えば、畳み込みニューられるネットワークは画像判別に強い。リカレントニューラルネットワークは時系列データに強い。しかしこれらの最近注目されている手法は、ほかのどんな状況においても万能であるわけではない。

ディープラーニングが注目されているからといって、ディープラーニングだけ学べばよいというわけではない。適切な機械学習アルゴリズムを選定するには、多くの機械学習アルゴリズムの知識を得る必要がある。

以上。
自分の考えを整理するための文章だが、もしもこれが誰かの役に立つのであれば大変うれしい。