SHOEISHA iD

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

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

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

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から

機械学習による分析過程を把握しつつ、支援ツールによる自動化で的確な分析結果を得る(前編)

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から 第1回

データの前処理

データ形式の整備

 まず、データを分析しやすい形に整備します。データ分析によく用いられる言語「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にカテゴリ変数を、ダミー変数を用いた変数に変換する例を示します。

図2 カテゴリ変数の変換
図2 カテゴリ変数の変換

 変換を行うカテゴリ変数において、値として取り得るものをピックアップし、それらを新たな変数として作成します。作成された変数の値は、元のカテゴリ変数の値が新たな変数名であるときに1、それ以外のときに0となります。カテゴリ変数の種別がN種類あるとき、ダミー変数はN-1種類作成すれば良いことに注意してください(N-1種類の変数が全て0であることと、N番目の変数が1であることが等価であるためです)。図2では、「スタンダード」「ライト」「プレミアム」の3つの変数がいずれも0であればそれは「シニア」であると判定できるので、「シニア」という変数は不要になるということです。

アルゴリズムの選択

 データの用意ができたら、分析に利用するアルゴリズムを決定します。データ分析の目的が予測である場合に利用可能なアルゴリズムは、近年注目を集めている深層学習(Deep learning)だけでなく、サポートベクターマシンや決定木/回帰木、ロジスティック回帰、ランダムフォレストなど、さまざまなものが提案されています。

 よく「銀の弾丸はない」と言われるように、機械学習の分野においても、全ての問題において常に最良の結果が得られるアルゴリズムというものはありません(ノーフリーランチ定理とも言います)。したがって、実際の分析では複数のアルゴリズムを試してみるのが良いでしょう。

 しかし、分析にかけられる時間は有限なので、全てのアルゴリズムを試してみることはできません。試してみるアルゴリズムに当たりをつけることは、ある程度の経験が求められるところかもしれません。

 公開されているアルゴリズム選択のチートシートなどを参考にするのも良いでしょう。

次のページ
分析作業とそこでの考慮が必要なこと

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

トップエスイーからのアウトカム ~ ソフトウェア工学の現場から連載記事一覧

もっと読む

この記事の著者

鴨志田 亮太(日立製作所)(カモシダ リョウタ)

日立製作所 研究開発グループ所属 研究員。トップエスイー9期生(2014年度)。OSSの機械学習ライブラリが充実するなかで、それらを利用した、正しいデータ分析プロセスの習得をどうサポートできるかに興味を持ち、データ分析支援ツールMALSSを開発。 MALSS(GitHub) 機械学習によるデータ分析まわりのお話(SlideShare)

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9981 2017/03/01 14:00

イベント

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

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

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

メールバックナンバー