SHOEISHA iD

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

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

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

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

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

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


MALSSを使ったデータ分析

 それでは実際にMALSSを使ってデータ分析をしてみましょう。Pythonのスクリプトは以下のようになります(Python3.5で動作確認)。

import pandas as pd
from malss import MALSS

data = pd.read_csv('http://www-bcf.usc.edu/~gareth/ISL/Heart.csv',
                   index_col=0, na_values=[''])
y = data['AHD']
del data['AHD']

clf = MALSS('classification', lang='jp')
clf.fit(data, y, 'report_dir')

 まずはデータを用意します。今回は南カリフォルニア大学で公開されているデータ(CSVファイル)を利用しましょう。このデータは「Heart Disease Data Set」というもので、心臓病かどうかを判別する分類タスクに利用できます。データ数は303です。年齢や性別、血糖値など13個の説明変数から、心臓病かどうかを表す目的変数AHD(Yes/No)を判別します。

 ソースコードを見てください。はじめにデータを読み込みましょう(4行目)。データを読み込んだら、説明変数(data)と目的変数(y)に分けます(6~7行目)。

 いよいよ分析を行います。はじめに、malssのインスタンスを作成し、分析目的(classification(分類)とregression(回帰)が選択可能です。今回はclassificationを選択します)と、分析レポートの言語(jp:日本語、en:英語)を選択します(9行目)。そして、fitメソッドに説明変数と目的変数、レポートの出力ディレクトリを指定するだけです(10行目)。

 分析中はコンソールに検討するアルゴリズムの一覧が表示されます(図4)。検討するアルゴリズムの種類は、分析目的、データサイズに応じてmalssが自動で決定します(分析者が指定することも可能です)。分析は数分~十数分で終了します。

図4 コンソール出力の例
図4 コンソール出力の例

分析レポートの確認

 分析が終了したら、分析レポートを確認しましょう。指定したレポート出力ディレクトリにreport.htmlが出力されているので、ブラウザで開いてください。

 分析レポートには、最初に検討したアルゴリズムごとの評価結果が一覧表示されます(図5)。アルゴリズム名をクリックすることで、各アルゴリズムの分析結果詳細を確認することができます。「解説」のところには、「交差検証」「スコア」などレポート中の用語の解説を載せています。さらに、専門用語には外部の解説ページなどへのリンクがつけられています。このように、分析レポートは分析者の知識が十分でない場合にも、知識習得をしながら結果を確認できるようになっています。

図5 分析レポートの例[1]
図5 分析レポートの例[1]

 次の段落ではデータの概要を説明します(図6)。データがカテゴリ変数や欠損値を含む場合はそれぞれダミー変数による処理、欠損値置換を実施し、本稿で述べたような解説を加えています。

図6 分析レポートの例[2]
図6 分析レポートの例[2]

 最後に、検討したアルゴリズム一つ一つの分析結果詳細を確認していきます(図7)。はじめに、グリッドサーチによるハイパーパラメータチューニング結果を確認します。図7の結果だと、Cの値が1のときと10のときのスコアが同じなので、この付近でさらに細かくCの値を振ってみると(例えば、C = 0.3や3、30など)、より最適なCの値を見つけることができるかもしれません。

図7 分析レポートの例[3]
図7 分析レポートの例[3]

 次に学習曲線を確認します(図8)。図8の結果だと、このモデル(リニアカーネルのサポートベクターマシン)は、ハイバイアスの傾向があることが確認できます。そこで、性能改善に向けた対策として新しい特徴量(説明変数)を加えることができないかを検討します。あるいは、より複雑なモデルを試してみる(malssの場合はすでに複数のアルゴリズムで検討されているので、他の検討結果を見てみる)と、いったことも考えられます。

図8 分析レポートの例[4]
図8 分析レポートの例[4]

おわりに

 本稿では機械学習のアルゴリズムや、そのライブラリの利用方法ではなく、データ分析のプロセスに焦点を当てて説明をしてきました。データの前処理、アルゴリズム選択、分析、評価と一連のプロセスについて解説することで、分析時の注意点などをご理解いただけたでしょうか。

 また、これら一連のデータ分析プロセスを自動化するとともに、レポートにより分析者の知識習得を支援する、拙作のPythonライブラリMALSSを紹介させていただきました。全てのプロセス、注意点を網羅できている訳ではありませんが、少しでもみなさまのデータ分析や、分析結果を確認するときのお役に立てていただければ幸いです。

トップエスイーについて

 トップエスイーは国立情報学研究所で提供している、社会人エンジニア向けのソフトウェア工学に関する教育プログラムです。トップエスイーでは講義や制作課題を通して、最先端の研究成果や現場で得られた知見が蓄積されてきました。その「アウトカム」、つまり成果やそこに至る過程を紹介し、現場のエンジニアの方々に活用していただけるような記事を連載することになりました。前回と今回は機械学習という難しい領域をより身近にできるツールであるMALSSを、トップエスイーの修了制作で取り組んだ結果を元に記事化しました。「修了制作」はトップエスイー受講者にとっての集大成となる課題で、3~6カ月かけて各自が特定のテーマに取り組むものです。2017年度からは、トップエスイーコースとアドバンス・トップエスイーコースの2つのコースとなり、修了制作は前者の「ソフトウェア開発実践演習」や後者のコース全体のカリキュラムに引き継がれています。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
トップエスイーからのアウトカム ~ ソフトウェア工学の現場から連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9995 2017/03/08 16:04

イベント

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

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

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

メールバックナンバー