データの前処理
データ形式の整備
まず、データを分析しやすい形に整備します。データ分析によく用いられる言語「R」の分野で著名なHadley Wickham氏は「Tidy data」という考え方を提案しています。Tidy dataとは、以下の条件を満たした形式のデータを指します。
- 各列が各変数に対応している
- 各行が各観測値に対応している
- 一つの基準に基づく観測値の集合でデータ(テーブル)が構成される
図1のデータはTidy dataであることを意識しています。このような形式のデータは、人間の可読性という観点からは、必ずしも最適な形式ではないかもしれません。この形式はコンピュータにとっての扱いやすさを重視しており、多くの機械学習ライブラリがこの形式のデータが入力として与えられることを想定しています。最初にこの形式にデータを整備しておくことで、データの可視化や分析など、さまざまな処理を一気通貫に行うことが可能となります。
欠損値の処理
次に、データが欠損を含む場合を考えます。欠損が生じる原因は、次のようなものが考えられます。
- 完全にランダムに発生する(Missing Completely At Random:MCAR)
- 他の変数の値に依存して発生する(Missing At Random:MAR)
- その変数の値に依存して発生する(Missing Not At Random:MNAR)
欠損のメカニズムがMCAR、つまり完全にランダムであり収集できたデータが大量にある場合には、欠損値を含む観測値(図1の1行分のデータ全て)を削除してしまう(リストワイズ除去)のが簡単で影響も少ないです。なお、欠損値にその変数の平均値や最頻値を代入するという方法もありますが、この方法は分析結果に影響を与えるため注意が必要です。
MARやMNARの場合にはリストワイズ除去も分析結果に影響を与えてしまいます。分析結果に与える影響を抑えるための欠損値対処法としては、完全情報最尤法(Full Information Maximum Likelihood method:FIML)や、多重代入法(Multiple Imputation:MI)が知られています。
カテゴリ変数の変換
「都道府県」などのデータのように、変数の値が単なるラベルであるような「カテゴリ変数」はそのままでは機械学習ライブラリでの利用に適していないことが多いです。これは、カテゴリ変数が数値ではなく文字列だから、というわけではありません。仮に、カテゴリ変数が数字で表されていても(例えば東京なら13、大阪なら27のように)、それを量的変数として扱うことは適切ではありません。数字そのものもラベルであり、計算の対象にならないからです。例で言えばたまたま大阪と東京に割り当てた値がそのようになっていただけで、「大阪は東京の2倍強です」ということは、何らかの事実を表すものではないからです。
カテゴリ変数を扱いやすくするために「ダミー変数」という考え方を用いて、カテゴリ変数を量的変数に変換する方法が一般的に用いられます(「1-of-K表現」や「One hot encoding」などと呼ばれることもあります)。図2にカテゴリ変数を、ダミー変数を用いた変数に変換する例を示します。
変換を行うカテゴリ変数において、値として取り得るものをピックアップし、それらを新たな変数として作成します。作成された変数の値は、元のカテゴリ変数の値が新たな変数名であるときに1、それ以外のときに0となります。カテゴリ変数の種別がN種類あるとき、ダミー変数はN-1種類作成すれば良いことに注意してください(N-1種類の変数が全て0であることと、N番目の変数が1であることが等価であるためです)。図2では、「スタンダード」「ライト」「プレミアム」の3つの変数がいずれも0であればそれは「シニア」であると判定できるので、「シニア」という変数は不要になるということです。
アルゴリズムの選択
データの用意ができたら、分析に利用するアルゴリズムを決定します。データ分析の目的が予測である場合に利用可能なアルゴリズムは、近年注目を集めている深層学習(Deep learning)だけでなく、サポートベクターマシンや決定木/回帰木、ロジスティック回帰、ランダムフォレストなど、さまざまなものが提案されています。
よく「銀の弾丸はない」と言われるように、機械学習の分野においても、全ての問題において常に最良の結果が得られるアルゴリズムというものはありません(ノーフリーランチ定理とも言います)。したがって、実際の分析では複数のアルゴリズムを試してみるのが良いでしょう。
しかし、分析にかけられる時間は有限なので、全てのアルゴリズムを試してみることはできません。試してみるアルゴリズムに当たりをつけることは、ある程度の経験が求められるところかもしれません。
公開されているアルゴリズム選択のチートシートなどを参考にするのも良いでしょう。
