SHOEISHA iD

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

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

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

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

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


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

評価に基づく対策の立て方

 ここまで、データの前処理から、アルゴリズムの選択、分析、評価と一連のデータ分析プロセスについて見てきました。一通りの分析が完了した段階で、さらなる性能向上を狙いたい場合は、どのような対策を行えばいいでしょうか。「データを増やす」「説明変数を見直す」「アルゴリズムを変えてみる」などのさまざまなアプローチが考えられますが、どの選択肢が優れているのでしょうか。本節では学習曲線というものを作成し、性能改善策を検討するアプローチを紹介します。

バイアスとバリアンス

 学習曲線の説明に入る前に、「バイアス」と「バリアンス」という考え方を理解する必要があります。これらはどちらも誤差に関する考え方です。

 手元の学習データから予測モデルを作成したとき、そのモデルの予測性能は学習データの質に大きく依存します。つまり、学習データがたまたま母集団(一般にこれをわれわれ分析者が知ることはできません)からバランスよくサンプリングされたものであれば、その学習データから作成した予測モデルの未知のデータに対する予測性能(汎化性能)は高くなると考えられます。一方、運悪く学習データが母集団の分布に対して偏っている場合、その学習データから作成した予測モデルは母集団の傾向をうまく学習することができないため、汎化性能は低くなると考えられます。このように、学習データの母集団に対する偏りに起因する誤差を「バリアンス」といいます。そして、学習データに依存した誤差のバラツキがある中で、その予測モデルに期待できる平均的な誤差(つまりモデルの性能に起因する誤差)を「バイアス」といいます。

 高次の多項式のように複雑なモデルの場合、バイアスは小さくなりますが(ローバイアス)、学習データが偏っているときに過学習してしまうため、バリアンスが大きくなります(ハイバリアンス)。一方、一次式のような単純なモデルだと、バイアスは大きくなりますが(ハイバイアス)、学習データの偏りに引きずられにくく、バリアンスは小さくなります(ローバリアンス)。このように、バイアスとバリアンスにはトレードオフの関係があるため、両者がバランスよく小さくなるところを目指していく必要があります。そのためには、今現在の予測モデルが、ハイバイアスな傾向があるのか、ハイバリアンスな傾向があるのかを知る必要があります。

学習曲線

 今現在、予測モデルがハイバイアスな傾向があるのか、ハイバリアンスな傾向があるのかを推定するために、学習曲線を作成するというアプローチがあります。学習曲線とは、図3のようなものです。横軸は学習データのデータ数で、手持ちのデータの一部を取り出し、そのデータに対して予測モデルの学習および評価を行います。取り出すデータ量を増やしていくつかの予測モデルを評価し、最終的には全部のデータを使った結果を評価します。縦軸はモデルの性能を表し、青のプロットは学習用データに対する予測性能(以下、訓練スコア。一般に過学習し高い値になることをすでに見てきました)、橙のプロットは評価用データに対する予測性能(以下、検証スコア。交差検証などで計算します)を表します。

 図3(a)のように、過学習しているはずの訓練スコアさえも、目標としている性能に達していなかったり、訓練スコアと検証スコアの差が小さかったり、学習データを増やしていったときの検証スコアの向上が飽和気味であったりするような場合、現在の予測モデルは性能が十分でない、つまりハイバイアスな状態であると考えることができます。

 一方、図3(b)のように、訓練スコアは十分高いが、検証スコアが低く両者の差が大きい場合や、学習データを増やしていったときの検証スコアの向上がまだ飽和しておらず、さらに学習データを増やすことにより検証スコアの向上が期待できそうな場合、現在の予測モデルは過学習気味、つまりハイバリアンスな状態であると考えることができます。

 モデルがハイバイアスな状態にある場合は、

  • より複雑なアルゴリズムに変更する
  • 説明変数を増やす

と、いうことが、性能向上策として考えられます。モデルがハイバリアンスな状態にある場合は、

  • データを増やす
  • 不要な説明変数を除く、次元削減を行う

と、いうことが、が性能向上策として考えられます。

 このように、学習曲線を作成し現在のモデルの状態を推定することで、適切な性能向上策を検討することが可能となります。

図3 学習曲線の例
図3 学習曲線の例

ツールを用いた分析の自動化と知識習得

 これまで、データの前処理、アルゴリズム選択、分析、評価と、機械学習を用いたデータ分析の、一連のプロセスについて解説してきました。予測タスクにおけるこの分析プロセスはとても基本的なもので、ビジネスのドメインなどにより大きく変わることがありません。そこで筆者は、このような予測タスクの定型分析プロセスを自動化する、PythonのOSSライブラリMALSS (Machine Learning Support System)を開発しています。MALSSは筆者が、国立情報学研究所の主催するトップエスイープログラムに参加した際に、修了制作として開発したものです。

 単に分析を自動化するだけでは、分析プロセスの中身がブラックボックスになってしまい、分析者が発展的な分析を行うことができるようになりません。そこでMALSSは、分析レポートを作成します。分析レポートには分析結果と併せて、本稿で述べたような分析時の注意点や、学習曲線の見方、性能改善指針の立て方などを記載し、分析者の知識習得をサポートします。本章では、MALSSを使ったデータ分析の進め方についてご説明します。

MALSSの動作環境

 MALSSはPython2系(>= 2.7)、3系(>= 3.4)の両方に対応しています。また、以下の外部パッケージに依存しています。

  • numpy >= 1.10.2
  • scipy >= 0.16.1
  • scikit-learn >= 0.18
  • matplotlib >= 1.5.1
  • andas >= 0.14.1
  • jinja2 >= 2.8

 (※注:2017/02時点の情報です。詳しくはこちらでご確認ください。)

 Anacondaを利用すると、上記のパッケージを含むPython環境を簡単に構築することができます。

MALSSのインストール

 MALSSはPythonのパッケージ管理ツール、pipを使って簡単にインストールすることができます。前節で挙げた外部パッケージがインストールされた状態で、

と、実行することでインストールできます。

次のページ
MALSSを使ったデータ分析

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

  • X ポスト
  • このエントリーをはてなブックマークに追加
トップエスイーからのアウトカム ~ ソフトウェア工学の現場から連載記事一覧

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/9995 2017/03/08 16:04

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング