話題の記事

『Amazon Machine Learning Concepts』を読んでみた

2015.05.25

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Amazon Machine Learningが公開されて一月半程経ちますが、当ブログを御覧の皆様はこのサービスについてどの程度利用されていますでしょうか?弊社でも幾つかの案件で試験的に使ってみたり、社内でこの分野について興味を持っているエンジニア達が色々触って試行錯誤している状況です。

私もそんなAmazon Machine Learningに興味を持っているうちの1人ではありますが、私自身、機械学習や統計学についてはそこまで詳しかったり、関連する分野での経験をして来ている訳ではありません。むしろ初心者な方です。そんな私がこのサービスを理解するに当たり、そのコンセプトを解説したドキュメントが公開されていましたので読んでみました。読み進めて行く過程で関連しそうなWeb資料やドキュメント等も併せて参考にしてみたのですが、なにぶん初心者なもので『その理解、言葉の使い方間違ってんじゃね?』的なところもあるかもしれません。その際は是非コメント等でご指摘頂けますと幸いです。

目次

機械学習とは

機械学習を活用する事で、これまで蓄積していたデータを元に、ビジネス上のより良い決定を下すための判断材料を得る事が出来るようになります。

機械学習アルゴリズムはデータの中にパターンを見出し、そして、それら発見したパターンを用いて数学モデルを構築します。例えば、過去の行動に基づいて『顧客が特定の製品を購入する可能性がどれだけあるのか』というのを予測する...というのが機械学習モデルの1つの可能性としては考えられます。

Amazon Machine Learningで扱う機械学習の課題・問題

実際の解答がある問題に対して機械学習を使いたい、という場合、Amazon Machine Learningを利用する事が出来ます。

例えば『メールがスパムであるかどうかを予測する』というケースの場合、『スパムメール・迷惑メールでは無い』という"正しくラベル付けされている"メールの例を収集・一般化しておく事で、以後新しいメールがスパムか否かという予測を行う事が出来るようになります。これらの作業に、Amazon Machine Learningを利用する事が出来るのです。ちなみにこの『実際の答とラベル付けされているデータから行う機械学習のアプローチを『教師あり学習』と言います。

ここで『教師あり学習』という単語が出てきたのでWikipediaで関連ワードを調べてみます。(※適宜、用語を整理する上でこんな感じで表等を差し込んで行きたいと思います)

語句 意味
教師あり学習 機械学習の手法の1つで、事前に与えられたデータを『例題(=先生からの助言)』とみなし、 その例題をガイドに学習(=データへの何らかのフィッティング(適合))を行う事を指す。 『出力すべきもの』が決まっている。 ※具体例 - 分類問題(2項分類, 多項分類) / 回帰問題 ※参考:教師あり学習 - Wikipedia
教師なし学習 機械学習の手法の1つで、『出力すべきもの』が決まっていない。 データの背後に存在する本質的な構造を抽出するために用いられる。 教師あり学習は、「出力すべきもの」も入力として与えることで教師なし学習になる。 ※具体例 - クラスター分析 / 主成分分析 / ベクトル量子化 / 自己組織化マップ / 強化学習 / Q学習 ※参考:教師なし学習 - Wikipedia

ちなみにAmazon Machine Learningでは、現在は『教師あり学習』のみ対応している形となります。現在対応可能な『教師あり学習』のアプローチは以下3つです。

  • Binary classification(二項分類):入力値データを2つの選択肢のどちらかに分類。
    • 顧客はこの商品を買うか否か?
    • このEメールはスパムか否か?
    • この製品は書籍か、または家畜か?
    • このレビューは顧客が書いたものか、またはロボットが書いたものか?
  • Multiclass classification(多項分類):入力値データを3つ以上の選択肢のうちいずれかに分類。
    • この製品は書籍 or 映画 or 衣類?
    • この映画のカテゴリはロマンチックコメディ or ドキュメンタリー or ホラー?
    • 顧客が興味を示す製品のカテゴリはどのカテゴリ?
  • Regression(回帰分析):値の予測を行う作業。
    • 明日のシアトルの温度は何度?
    • この製品はどれだけ売れる?
    • この家は幾らで売れる?

いつ機械学習を使うのか

気をつけて欲しいのは『機械学習で全ての問題を解決出来る訳では無い』という事です。

例えば、単純なルールや計算、プログラムなど所定の手順を用いてターゲットとなる値を弾き出す事が出来るのならば、機械学習を使う必要はありません。

機械学習が必要となるケースとしては、以下の様なものが当てはまります。

  • ルールをコード化出来ないケース:メールをスパム判定させるような人力による判定を必要とするケースは、シンプルなルールで対応出来るものではありません。様々な要因が判定結果に影響を及ぼす可能性がありますし、ルールの組み合わせや条件の細かい調整等も必要となってきます。人力でこれらの作業を行う事は困難を伴いますが、機械学習はこのような問題を解決する手段として利用する事が可能です。
  • スケールをさせる事が出来ないケース:メールがスパムであるかの判定を仮に人力で行う場合、数百件であれば対応出来るかも知れません。しかし、その規模が数百万件規模だったとしたらどうでしょうか?手作業で行うには限界のあるような場合にも、機械学習は効果的に対応させる事が可能です。

機械学習の実施プロセス

機械学習は、一連の処理手順を含む反復プロセスから成り立っています。一般的には以下の手順に従って手順を進めて行く必要があります。

  • 1). 機械学習のモデルを使って『どんなデータを観察』して『何の回答を予測』したいかという対象テーマの課題を作成。
  • 2). データの収集、クレンジングなどを行い、機械学習のモデル訓練アルゴリズムで扱える形に適するように準備を整える。データの品質を検証し、理解する妥当性チェックを実行する為に可視化とデータ分析を行う。
  • 3). 多くの場合、用いるデータそのままの内容では、 高度な予測モデルを訓練させるために使うには不十分だったりします。 ですので、そのデータをより予測分析に適した形にするために 事前に加工を施しておく必要があります。
  • 4). モデルを構築するために特徴を流し込み、構築されたモデルの性能を評価します。
  • 5). モデルを使用して、新しいインスタンスデータに対するターゲットの回答となる予測を生成します。

Amazon Machine Learningのドキュメントには『target』『feature』等の単語が頻繁に出て来ます。そのまま読めば『ターゲット』『特徴』となりますが、色々調べてみると文脈に応じて若干読み替えた方が良いのかな、という感じでした。これで確定!という訳ではないですが、おおよそこんな感じで読み解いて行くと良いのかな、という個人的なメモを以下にまとめておきます。

語句 意味
target 対象となっているもの/予測したい内容/答
answer 解答、機械学習モデルを使って弾き出したい結果
feature 特徴・特徴量。 縦一列に並んだデータ。 観測の1つの要素であり、インスタンスの属性(Attribute)とも呼ばれる。 あるモデルへの入力(予測因子)となる事もあれば、出力結果を特徴と呼ぶ事もある。
instance インスタンス。 横一列に並んだデータの単位。データ1件。 特定ドメインに於ける観測結果。
observation 観測・観測データ

featureとinstanceについては、以下のエントリや資料等で図を交えて説明がされていたので展開します。

更には、社内有識者にこの辺りの『用語』に関する使い方、意味合いについて聞いてみたところ、用語の捉え方にも幾つかあるようでした。文脈に応じて判断して行く必要がありそうです。

入力データ ←→ 出力データ
説明変数 ←→ 目的変数
学習データ ←→ 正解ラベル
data ←→ target
データ ←→ 予測結果

問題の公式化

機械学習の最初のステップは、『何を予測したいか』を決める事です。これはlabel(ラベル)やtarget answer(予測結果)として何を得たいか、と置き換えても良いでしょう。

『製品を製造する』というシナリオがあるとしましょう。このシナリオで、製品が何回購入されたかを知りたい、即ち『販売数を予測』したいという要望があるとします。機械学習では、この課題を定義するための幾つかの方法が用意されており、その中でどれを選ぶかについてはユースケースやビジネスのニーズに依存します。

  • 各製品毎に、顧客がどれだけ購入するのか、購入数を予測したい
    • ターゲットは数値であり、回帰の問題を解決していく事になります。
  • どの製品が10個以上購入されるのか、購入される商品を予測したい
    • ターゲットはバイナリ(二値/二項)であり、二値/二項分類を解決していく事になります。

顧客のニーズを満たすべく、最もシンプル且つ効果的なソリューションを組み立てる事が重要ですが、機械学習のモデルを作成していく過程で『情報を失う事』、特にこれまでの経緯を示す情報や履歴情報を失う事もあるという点は留意しておく必要があります。

例えば、過去の販売数を『10以上か否か』という二値/二項変数に変換する際、変換のタイミングで『実際の個数(15個や7個)』の値は『10以上/10未満』のように変換されてしまう為、情報としては失われてしまいます。

どのターゲットが最も予測の理に適ったものかを決める作業に時間を投資する事で、問いに応えてくれるモデルを作成する事が出来るでしょう。

データの収集

機械学習に用いるデータは、既に(あなたが)ターゲットとなる予測結果(=答)を知っており、且つ大量データである事が望ましいでしょう。

機械学習の課題に取り組むためには、まずはデータを集める事から始まります。サンプルデータ・観測データには、以下2つの要素を含める必要があります。

  • ターゲット(target):予測したい『答』。機械学習アルゴリズムが学習を行うために、"正しい答(ターゲット)"でラベル付けしたデータを提供し、そのデータを使って機械学習モデル訓練させる事で、未来の『まだ予測結果を知らないデータ』に対する答を予測させるようにします。
  • 特徴(features):ターゲットの答を予測するために用いるパターンを識別する為に使われる(サンプル)データの属性。

例えば、Eメールの分類に関する問題では、ターゲットは『そのEメールがスパムかそうでないかを示すラベル』となります。

また変数の例としては以下のようなものが考えられるでしょう。

  • Eメールの送信者
  • メール本文のテキスト
  • メールの件名
  • Eメールの送信時間
  • 送信者と受信者のやり取りが過去にあったか

変数とターゲットを収集・準備しておく事は機械学習の課題を解決する上で最も重要なステップとなります。学習・訓練に用いるサンプルデータは、予測を行うモデルを扱う際にあるべきデータを代表する様な内容であるべきです。

例えば、メールがスパムであるかどうかを予測する場合、機械学習アルゴリズムが2種類のメールを区別する『パターン』を見つける事が出来るように以下双方のデータを収集しておく必要があります。

  • ポジティブなデータ(そのメールがスパムである)
  • ネガティブなデータ(そのメールはスパムでは無い)

ラベル付きデータを作成したら、それらをアルゴリズムやソフトウェアが受け入れられる様なフォーマットに変換する必要があります。例えばAmazon Machine Learning(でデータソースにS3)を使用する場合、データをCSVファイル(カンマ区切りフォーマットのファイル)に変換しておかなければなりません。

データを分析

機械学習アルゴリズムにラベル付きデータを供給する前に、利用するデータに関して問題を特定し、洞察や気付きを得るために『データを検査する』事をおすすめします。

データを分析する際は以下の考慮事項に注意しておく必要があります。

  • 変数と対象データの要約:変数が取る値の内容と、データの中でどの特徴が強くターゲットに影響しているか、を理解しておく事は有用です。解決したい問題のテーマを扱う専門家の助けを借りる事により、この要約作業を進める事が出来るでしょう。
    • データはあなたの期待したものに一致していますか?
    • それは、データコレクションの問題を持っているように見えますか?
    • ターゲット内のあるクラスは、他のクラスよりも頻繁に登場していますか?
    • 欠損値や無効なデータ(の量)は、想定以上のものでしょうか?
  • 変数とターゲットの相関:各変数とターゲットクラス間の相関関係を知る事についても有用です。高い相関があるものは、変数とターゲットクラスの間に関係性がある事をは意味するからです。一般には、高い相関を持つ変数はその要素が予測の際に非常に影響度を持つものとなるので追加し、逆に低い相関のものは影響無し、無関係となるため除外します。

Amazon Machine Learningでは、データソースを作成し、結果のデータレポートをレビューする事によってデータを分析出来ます。

特徴抽出処理

可視化や要約を通してデータを把握した後、更にそれらデータの変数を(機械学習を行う上で)意味のあるものに変換したいケースも出てくるかと思います。そのような時に行う処理を、feature processing(特徴抽出処理)と呼びます。

例えば、イベント発生日付と時刻をキャプチャする変数があるとします。

この『日付』『時刻』というデータはこのままの形式では『ターゲットの答えを予測する』という点では役に立つものではありません。ただし、この変数を『1日のうちの時間(帯)』『曜日』『月』等のような『特徴』として変換した場合、これらの変数はイベントの発生傾向を見るための情報として有用となり得るかもしれません。

このような処理をデータに施しておくことで、予測モデルに大幅な改善を行うことが出来ます。抽出処理の例には以下のようなものがあります。

  • 欠損値や無効な値を、より意味のある値に置き換える:
    • 『製品タイプ』という変数があり、その変数の欠損値が実際には『"本"である』と判明している場合、製品タイプにおける全ての欠損値を『本』で置き換えることが出来ます。欠損値を置き換えるために用いられる一般的な戦略は『平均値または中央値で(欠損値を)置換する』ことです。この手法を採用する前に、対象となるデータを理解しておく事が重要です。
  • 2つの変数を用いて『デカルト積(直積集合)』を作成する:
    • 例えば『人口密度を表す指標』(都市/郊外/田舎)と『州』(ワシントン/オレゴン/カリフォルニア)という2つの変数がある場合、それら2つの変数の『デカルト積(直積集合)』によって形成される特徴抽出作業を行う事で有用な情報となり得るでしょう。
    • 上記データ構成による『デカルト積のイメージ』は以下の様な感じです。『デカルト積』そのものの意味合いについては幾つか情報を漁ってみましたが、『全ての組み合わせ』というのが一番シンプルで分かり易いかもですね。
      urban_Washington suburban_Washington suburban_Washington
      urban_Oregon suburban_Washington suburban_Washington
      urban_California suburban_Washington suburban_Washington
  • 数値変数をカテゴリにビニングするような非線形変換:
    • 多くの場合、数値の特徴とターゲットの間の関係は"線形"ではありません。(特徴の値がターゲットの値とともに単純に増えたり減ったりしない)
    • このような場合、数値特徴を、その数値の"範囲"を表す『カテゴリ』の特徴に置き換える=ビニングする事で有用となる事があります。(ビン:bin、ヒストグラムのグラフの柱(棒)のこと。カテゴリ分け、するという意味。)
    • 各々のカテゴリの特徴(ビン)はターゲットと線形の関係を有するものとしてモデル化する事が出来ます。
    • 例えば、連続した『年齢』の数値特徴は、本を購入する可能性とは線形的な相関は無い、という事は分かっています。
    • 年齢をカテゴリにビニングする事で、そのカテゴリを使ってターゲットとの関係をより正確に捉える事が出来るかもしれません。
    • 数値変数のビンの最適な数は、変数の特性とターゲットとの関連に依存します。そしてこれらの内容は経験を通してベストな値が弾き出される事でしょう。Amazon Machine Learningは推奨のレシピのデータ統計量に基づく、数値特徴の最適なビンの数を提示しています。
    • 推奨レシピについての詳細については開発者ガイドを参照ください。
  • ドメイン固有の特徴:
    • 例えば、独立した変数としての長さ、幅、及び高さを持つ場合:これら3つの変数のプロダクトとなる新しい特徴を作成出来ます。
  • 変数固有の特徴:
    • テキストやWebページや文章の構造をキャプチャするような特徴を持つ幾つかの変数タイプに対しては、構造とコンテキストを抽出する一般的な方法があります。
    • 例えば、『the fox jumped over the fence』というテキストから成るNグラムのテキストは、以下の方式等で表現する事が出来ます。
      • 『the/fox/jumped/over/fence』→ unigrams(ユニグラム:1語単位で文字列を分割する方式)
      • 『the fox/fox jumped/jumped over/over the/the fence』→ bigrams(バイグラム:2語単位で1つずつずらして文字列を分割する方式)

より関連性の高い特徴を含める事で、予測力を向上させる事が出来ます。

"信号"となる特徴や、予測に影響を及ぼすような特徴を前以て知る事は常に可能という訳ではありません。なので、潜在的にターゲットラベルに関連し、モデルの訓練アルゴリズムが最も相関関係を持つ特徴を選択出来るような特徴を"全て"含めておく事をお勧めします。

Amazon Machine Learningでは、モデル作成時にレシピで特徴抽出処理を選ぶ事が出来ます。利用可能なものについては管理者ガイドをご参照ください。

データを訓練用、評価用に分割

機械学習の基本的な目標は、モデルの訓練に使用するデータを一般化する事です。

その一般化の品質を見積もるために作業を進めたいところですが、将来目にする事になるデータはターゲットとなる予測結果を知りません。なのでその将来目にするデータのための代用品として、既に答えを知っているデータを使う必要があります。

訓練の際、過去に用いられたものと同じデータでモデルを評価する事は有益ではありません。なぜならそれは"訓練データを覚えている"モデルを作ってしまう事になるからです。データを"一般化"させるモデルを作りたいので、これは正反対のアクションとなってしまいます。

一般的な手法としては、全てのラベル付きデータをランダムに『訓練用』と『評価用』のサブセットに分割するものがあります。この時の分割の割合は、訓練用:70〜80%、評価用:20〜30%という値が用いられる事が多いです。ランダムに分割する事でこれらのデータが生成される事が重要であり、これによりデータの分布が訓練用と評価用で似たようなものになります。

モデルの予測パフォーマンスは、評価するデータセット上で真の値(ground truth:正解データ)を使った予測の比較によって評価されます。評価サブセットに於ける"ベスト"なモデルが、結果の分からない未来のデータの予測を行うために使われます。

ここで出てくる『ground truth』という言葉、意味合いとしては『正解データ』という形になるのですが、背景については以下の様なものがあるようです。

Amazon Machine Learningでは、デフォルト設定で、データを70%のトレーニング用データと30%の評価用データに分割します。またAmazon Machine Learningでは、分割比率をカスタムで設定出来るオプション、Amazon Machine Learningの外で分割されたトレーニングと評価データを利用するオプションを有しています。

モデルを訓練

訓練データと機械学習アルゴリズムを提供する準備が整いました。アルゴリズムは、訓練データのパターンを学習し、関係性を捉えたモデルを生成します。生成された機械学習モデルは、我々がまだ結果を知っていない、新しいデータに対する予測を得るために使用されます。

線形モデル/Linear Models

利用可能な機械学習モデルは数多く存在しますが、その中でAmazon Machine Learningが提供する機械学習モデルの1つに『線形モデル』というものがあります。線形モデルとは、モデルに特徴の"線形結合"が指定されているものになります。学習プロセスはターゲットの答を予測・推定出来るモデルを生成するために、訓練データに基いて特徴毎に計算を行います。

例えば、ターゲットが『顧客が購入する保険の金額』で変数が『年齢』と『収入』の場合、シンプルな線形モデルは以下の様になるでしょう。

Estimated target = 0.2 + 5 age + 0.0003 income

学習アルゴリズム/Learning Algorithm

学習アルゴリズムの役目は『モデルの重みを学ぶ事』です。学習アルゴリズムは、損失関数(loss function)と最適化手法で構成されます。損失とは、機械学習モデルによって提供されるターゲットの見積りがターゲットと正確に等しくない場合に発生するペナルティです。

損失関数とは、このペナルティを単一の値として定量化する関数です。

最適化手法はこの損失を最小限にしようとします。Amazon Machine Learningでは、3つの損失関数(予測の問題3種類それぞれに1つ)を用意しています。Amazon Machine Learningで用いられる最適化テクニックは、確率的勾配降下法(SGD)です。

Amazon Machine Learningは以下の学習アルゴリズムを使用します。

  • 二項分類:
    • Amazon Machine Learningはロジスティック回帰(logistic regression)を使用します。 (ロジスティック損失関数 + SGD)
  • 多項分類:
    • Amazon Machine Learningは多項ロジスティック回帰(multinomial logistic regression)を使用します。 (多項ロジスティック損失関数 + SGD)
  • 回帰分析:
    • Amazon Machine Learningは線形回帰(linear regression)を使用します。 (二乗損失関数(squared loss function) + SGD)

それぞれで使用するアルゴリズムについて、参考になりそうなWeb情報を以下にまとめておきます。

訓練/教師パラメータ/Training Parameters

学習アルゴリズムは『ハイパーパラメータ』(学習前に与えるパラメータ) 又は『訓練パラメータ』と呼ばれるパラメータを受け取ります。(※『ハイパーパラメータ』ってのは聞き慣れない単語ですが、以下の様な意味合いがあるようです。)

インターネット上に公開されていた論文によると、ハイパーパラメータとは、 事前確率を決めるパラメータや確率モデル全体に影響を与えるパラメータのことを指すようです。 つまり、ハイパーパラメータを決定することによって確率モデルの分布も決定するようです。

これらのパラメータは、結果として得られるモデルの品質を制御する事が出来ます。以下の項では、線形モデルの学習アルゴリズムに関連する共通のハイパーパラメータについて紹介します。

学習率

学習率(learning rate)は、SGDアルゴリズムで用いられる定数値です。

アルゴリズムが『最適な重み』に達する(収束する)速度に影響を与えます。オンラインSGDアルゴリズムは、見ているデータサンプル全てに対する線形モデルの重みを更新します。これらの更新のサイズは学習率によって制御されます。学習率を大きくし過ぎると、学習速度は早くなりますが予測確率は安定せず、最適解にならない可能性があります。逆に小さすぎると、最適解を求めるための試行回数が過剰に増加してしまう可能性があります。

正則化

正則化(Regularization)は、極端な重みの値にペナルティを与える事により、線形モデルが過学習してしまう事を防ぐのに役立ちます。

L1正則化は、小さな重み付けをしなければならない特徴の重みに0を与える事により、モデルで使用される特徴の数を減らす効果があります。従って、L1正則化は"疎なモデル"(sparse models)、解を得やすいモデルとなり、モデルに於けるノイズの量を減らします。またL2正則化は、全体的な重みの値が小さい結果となり、特徴間に高い相関関係がある場合、重みを安定化させる効果があります。

L1またはL2正則化は正則化パラメータによって制御を行う事が出来ます。非常に大規模な正規化パラメータは全ての特徴を0にする可能性があります。

※正則化に関する補足情報で参考になりそうなものを以下に記します。

  • 過剰適合 - Wikipedia
  • RでL1 / L2正則化を実践する - 銀座で働くデータサイエンティストのブログ
    そこでL1正則化は「不要なパラメータを削りたい」(次元・特徴量削減)という時によく使われるんですね。 一方でL2正則化の場合は過学習を抑えて汎化された滑らかなモデルを得やすいことが知られています。 なおL1正則化回帰はLasso回帰、L2正則化回帰はRidge回帰とも呼ばれ、教科書(サポートベクターマシン入門) によっては主にこちらの名前で書かれているものもあります。
  • 回帰モデルにおけるL1正則化とL2正則化の効果 - old school magic
    L1ノルムとL2ノルムの特徴を簡単にまとめると次のようになります。 - L1ノルムはパラメータの一部を完全に0にするため、モデルの推定と変数選択を同時に行うことができる - 特に次元数>>データ数の状況で強力 - L2ノルムは微分可能であり解析的に解けるが、L1ノルムは 解析的に計算出来ない - L1ノルムには様々な推定アルゴリズムが提案されている
パスの数

このパラメータは、アルゴリズムがトレーニングデータを介して行う更新の回数を制御します。

パスの数が多くなると、より良いモデル適合をもたらします。(学習率が大きすぎない場合) しかし、利点はパス数の増加と共に減少します。

小さなデータセットに対しては、パス数はより大きな値に増やす事が出来、アルゴリズムが効果的に、より密接にデータを適合させる事が出来ます。非常に大きなデータセットの場合であれば、モデル学習の視点と訓練時間の観点から、単一のパスで十分となるかも知れません。(※この辺り、文脈から推測すると、勾配降下法によるパラメータの更新サイクルの事を指している?)

モデルのサイズ

入力データに特徴が数多くあり、またそのデータに対し強力なL1正則化を使っていない場合、そのデータは結果としてモデルのサイズが大きくなる可能性があります。モデルのサイズが大きいと、訓練時にモデルを保持する為に、そして予測生成時により多くのRAMを必要とします。

Amazon Machine Learningでは、モデルサイズを小さくするためにL1正則化を使う、またはモデルの最大サイズを指定する事でサイズを制限する事が出来ます。モデルのサイズを減らし過ぎると、モデルの予測力が落ちてしまう事になってしまうのでその点はご注意ください。

Amazon Machine Learningでは、学習率はデータに基いて自動選択されます。そしてAmazon Machine Learningは『パス数(number of passes)』『正則化タイプ(regularization type)』『モデルのサイズ(model size)』の3つのパラメータに対して既定値を提供します。

既定のパラメータ設定で競争力のあるモデルを作成出来る一方で、これらパラメータの代替値をカスタム設定する事でモデルの予測パフォーマンスを改善させる事も可能です。モデルのトレーニングパラメータ設定に関する詳細については開発者ガイドを参照してください。

モデルの正確度を評価

機械学習モデルの目的は、トレーニング中に示されたデータを記憶するだけでは無く、まだ見ぬデータを一般化するパターンを学習する事です。

一旦モデルを作成したら、モデルのトレーニングで使っていない未見のサンプルでモデルを動かす際にそれらをチェックする事が重要です。この作業を行うために、評価データセットの答を予測するためにモデルを使い、予測結果と実際の回答(ground truth)を比較します。

メトリクスの数は機械学習でモデルの予測正確度を測定するために使われます。正解度メトリクスの選択は、機械学習のタスクに依存します。モデルが十分な正確度で実行するかどうかをを決めるためにこれらのメトリクスを確認する事が重要です。

二項分類

(※まずは用語そのものについて調べてみます。)

二項分類(にこうぶんるい、英: Binary classification)は、オブジェクトの集合を 個々のオブジェクトがある特定の属性を持つかどうかで2種類にグループ分けする分類作業である。 二値分類(にちぶんるい)、2クラス分類とも呼ばれ、多クラス分類において分類先のクラス数が 2の場合と考えることができる。二項分類が一般に使われる分野としては、以下のものが挙げられる。 - 臨床検査で患者が特定の疾病に罹患しているか否かで分類する(分類属性は疾病)。 - 工場での品質管理。すなわち、ある製品が出荷できる品質か、それとも捨てるべきかの判断(分類属性は品質)。 - あるページや記事を検索結果に含めるか否か。(分類属性はその記事の関連性、例えばある単語が含まれているかどうか)

多くの二項分類アルゴリズムの実際の出力は『予測スコア』です。このスコアは、指定された観測データ(observation)がポジティブなクラスに属するシステムの確実性を示します。

観測データがポジティブまたはネガティブに分類されるかどうかの判断を行うために、分類閾値(カットオフ)を選択する事によりスコアを解釈し、そのスコアを比較します。閾値よりも高いスコアを持つデータは『ポジティブ』と予測され、閾値よりも低いスコアのデータは『ネガティブ』と予測されます。

mlconcepts_image2 (図:二値分類モデルのスコア分布図)

(※この辺りの判定方法について参考になりそうなエントリを以下に並べてみました)

予測では、実際の答と予測の答に基づいて以下4つのグループに分類を行います。

  • 正しくポジティブ(True Positive)
  • 正しくネガティブ(True Negative)
  • 誤ったポジティブ(False Positive)
  • 誤ったネガティブ(False Negative)

二値分類の精度メトリクスは、2種類の正しい予測と2種類のエラーを定量化します。

典型的なメトリクスは、Accuracy(正確度)、Precision(精度、適合率)、Recall(再現率)、False Positive Rate(偽陽性率)、F1-measure(F1値)です。

  • Accuracy(正確度)は正しい予測の割合を測定します。
  • Precision(精度、適合率)は陽性と予測されている例のうち、実際の陽性の割合を測定します。
  • Recall(再現率)は、ポジティブなデータがポジティブなものとして実際にどの程度予測されたのかを測定します。
  • F1-measures(F1値)は、Precision(精度、適合率)とRecall(再現率)の調和平均です。

AUCは上記のものとは異なるメトリックです。ネガティブな例と比べてポジティブな例でより高いスコアを予測するためのモデルの能力を測定します。AUCは選択した閾値とは独立しているものになるので、閾値の無いAUCメトリックからモデルの予測パフォーマンスの感触を得る事が出来ます。

  • ※AUC:Area Under the Curveのこと。ROC曲線の曲線よりしたの面積。分類器の精度評価に使うもののようです。以下参考情報。

ビジネスの問題によって、これら指標の特定のサブセットに対してより良い性能を発揮するモデルに関心を持ってくるかも知れません。例えば、2つのビジネスアプリケーションは機械学習モデルの要件で全く異なってくるかも知れないのです。

  • あるアプリケーションはポジティブな予測が、実際に(高精度で)ポジティブである事を非常に必要とし、幾つかのポジティブな例をネガティブなもの(中程度のリコール)として誤分類出来るようにする必要があるかも知れません。
  • また別のアプリケーションでは、可能な限り(高い再現率で)多くのポジティブな例を正しく予測し、幾つかのネガティブな例を(適度な精度で)ポジティブなものとして誤分類する事を受け入れる必要があるかも知れません。

Amazon Machine Learningでは、観測データ(observation)は0から1の範囲で予測スコアを得ます。0または1として例を分類する決定を下すためのスコアの閾値は、デフォルトでは0.5で設定されます。

Amazon Machine Learningを使うことで、異なる閾値を選択する事による影響をそれぞれ確認し、ビジネス要件に合った適切な閾値を選択する事が出来ます。

多項分類

二項分類問題のプロセスとは異なり、多項分類では予測するためのスコア閾値を選択する必要はありません。

予測の答は、最高の予測スコアのクラス(即ち『ラベル』)です。幾つかのケースでは、高いスコアで予測された場合にのみ、その予測の答を使う場合もあるでしょう。この場合、予測された答を受け入れるかどうかという点に基いて予測スコアの閾値を選択する事になります。

多項分類で使用される典型的なメトリクスは、二項分類で使用されるメトリクスと同じです。

メトリクスは他の全てのクラスを"2番めのクラスに属するもの"としてグループ化した後、二値分類問題として扱うことによってメトリクスはクラス毎に計算されます。その際、マクロ平均(クラスそれぞれを同じように扱う)または加重平均(クラスの頻度によって重み付け)メトリックのいずれかを取得する為に、二項分類メトリクスは全てのクラス上で平均化されます。Amazon Machine Learningでは、マクロ平均F1-measureは多クラス分類の予測の成功を評価するために使用されます。

mlconcepts_image3 (図:多クラス分類モデルの混同行列)

多項分類問題に対する『混同行列』を検討する事は有益です。混同行列は、評価データと正確な予測と不正確な予測の数または割合の各クラスを示す表です。(※混同行列に関する参考になりそうな情報は以下あたりか)

回帰分析

(※"回帰分析"というワードで幾つかあるようなので、ひとまず列挙してみます。)

回帰タスクにとって、典型的な正確度のメトリクスは二乗平均平方根(root mean square error:RMSE)と平均絶対誤差率(Mean Absolute Percentage Error:MAPE)です。

これらのメトリクスは予測された数値ターゲットと実際の数値回答(ground truth)間の距離を測定します。Amazon Machine Learningでは、RMSEメトリックは回帰モデルの予測正確度を評価するために使用されます。

mlconcepts_image4

これは、回帰問題の残差(residuals)を検討する一般的な方法です。評価データの観測内容に対する残差は、真のターゲット(答)と予測ターゲット(結果)の差となります。残差は、モデルが予測する事が出来ないターゲットの一部を表します。

ポジティブな残留は、モデルがターゲットを過小評価している(実際のターゲットが予測ターゲットよりも大きい)という事を示しています。ネガティブな残留は、モデルがターゲットを過大評価している(実際のターゲットが予測ターゲットよりも小さい)という事を示しています。(※以降文章が少し続くのですが、いまいち読み解く事が出来ませんでした。改めて別の機会で理解を深めてみたいと思います)

モデルの正確度向上

顧客のニーズに合う機械学習モデルを見つけていく作業の中には、当ページで紹介している『機械学習プロセス』を反復していく事と、モデルやデータの幾つかのバリエーションを試してみるという事が含まれます。

最初のイテレーションでは、望むレベルでの予測モデルは得られないかもしれません。また、より良い予測モデルを得る為に、モデルを改善していく事も当然考えるでしょう。 パフォーマンスを向上させるためには、以下のステップを反復して行きます。

  • 1.データを収集する:モデルの訓練に用いるデータの数を増やします。
  • 2.特徴抽出処理:変数とより優れた特徴抽出処理を追加します。
  • 3.モデルパラメータのチューニング:学習アルゴリズムに用いられる訓練パラメータの代替値を検討してみましょう。

モデル適合:過学習 vs 学習不足

モデル適合を理解する事は、正解率(Accuracy)の悪いモデル根本的な原因を理解するために重要です。これを理解する事で、是正措置を取ることが出来るようになります。

訓練データと評価データの予測誤差を見る事で、予測モデルが訓練データをUnderfittingまたはOverfittingするかどうかを決める事が出来ます。

※この部分、Overfitting(過学習)に対するUnderfittingの日本語がパッと見つからなかったのですが、以下エントリで『学習不足』という言葉を用いているのを見つけたのでひとまず『学習不足』と読み替えてみました。

  • 機械学習の用語集:データ、学習とモデリング | コンピュータサイエンス | POSTD
    過学習(Over-Learning): あるモデルがトレーニング用データを度を越して綿密に学習しすぎたため一般化ができなくなった場合、 これを過学習と呼びます。こうなった場合、トレーニング用データセットでない実際のデータを前にしても 成績が上がりません。これは過度のフィッティングとも呼ばれます。 学習不足(Under-Learning): 学習期間が短かすきてあるモデルが対象のデータベースから十分な構造を学習し終えていない場合、 学習不足と呼ばれます。こうなった場合、一般化はされていても、トレーニング用データセットも含む すべてのデータを前にすると成績が上がりません。これはフィッティング不足とも呼ばれます。

mlconcepts_image5

訓練データに対するモデルのパフォーマンスが悪い時は、モデルは訓練データをUnderfittingします。これは、モデルが入力サンプル(しばしばXと呼ばれる)とターゲット値(しばしばYと呼ばれる)の関係をキャプチャ出来ない事に起因します。

一方、モデルが訓練データに対して問題無く動作する事が分かっているが、評価データに対しては上手く実行されていない場合、モデルは訓練データをOverfittingします。これはモデルがデータを記憶しており、未見のサンプルを一般化出来ない事に起因します。

モデルが単純過ぎて(入力の特徴が十分な表現力を持っていなくて)ターゲットを十分に記述出来ない場合、訓練データのパフォーマンスは低下する可能性があります。モデルの柔軟性を向上する事によってパフォーマンスは向上出来ます。モデルの柔軟性を向上させるには、以下の内容を試してみてください。

  • 新しいドメイン固有の特徴や特徴のデカルト積を追加し、使用する特徴抽出処理の種類を変える(例:Nグラムのサイズを増やす等)
  • 使用する正則化の量を減らす

モデルが訓練データをOverfittingする場合、モデルの柔軟性を減らすアクションは理に適っています。モデルの柔軟性を減らすには、以下の内容を試してみてください。

  • 特徴の選択:少ない特徴の組み合わせを使う、N-gramのサイズを減らす、数値属性ビンの数を減らす等を検討してみてください。
  • 使用する正則化の数を増やす

学習アルゴリズムが学習の為のデータを十分に持っていないと、訓練・テストデータの正確度が低下する可能性があります。以下の方法でパフォーマンスが向上します。

  • 訓練データサンプルの量を増やす
  • 既存の訓練データに対し、パスの数を増やす

モデルを使って予測を行う

これで機械学習モデルを上手く扱い、予測を実践する準備が整いました。Amazon Machine Learningでは、予測実行を行うための2つの方法があります。

バッチ一括処理による予測実行

バッチ一括実行予測は観測データに対する予測生成を一度に行い、特定の割合または観測データの数に対してアクションを行いたい時に便利です。通常、このようなアプリケーションには、低レイテンシ(遅延が低い=レスポンスが早い、処理速度を求められる)の要件はありません。

例えば、製品キャンペーンの広告の一環として、どの顧客をターゲットにするか決めたい場合、全ての顧客に対する予測スコアを得て、どの顧客が最も購入する可能性があり、最も購入する可能性がある上位5%の顧客が誰になるのかを知るためにそれらをソートするでしょう。

オンライン処理による予測実行

オンライン予測のシナリオは、低レイテンシ環境下でサンプル毎に、他のサンプルとは独立した形で1つずつ予測を生成したいようなシナリオがあります。例えば、特定のトランザクションが不正な取引をする可能性があるかどうかについて迅速な決断を行う為に、このオンライン予測を使う事ができます。

新しいデータでモデルを再訓練

正確度を予測するモデルが予測を行う際のデータは、訓練データと同じ様な配分である必要があります。データ分布は時間が掛かる事が予想されるので、モデルの配置は1回限りの実施では無く、むしろ継続的なプロセスを必要とします。データの分布が元の訓練データの分布から大幅に逸脱した場合、着信データを継続的に監視し、新しいデータでモデルを再訓練するのは良いプラクティスです。データ分布の変更を検出するデータ監視のオーバーヘッドが高い場合は、シンプルな戦略として毎日、毎週、または毎月のサイクルで定期的にモデルの訓練を行うというのもアリでしょう。

Amazon Machine Learningでの機械学習

以下の表は、当エントリで記載されている機械学習処理をAmazon Machine Learningで実施するための方法について一覧化したものです。

トピック 説明
機械学習プロセス Amazon Machine Learningタスク
データの分析 Amazon Machine Learningでデータを分析するには、データソースを作成し、データレポートを確認します。
データを訓練用/評価用に分割 Amazon Machine Learningは、データをランダムに選択された内容で、70%と30%のデータに分割出来ます。

ウィザードでデフォルト値として設定されている機械学習モデルを使うことで、この比率を利用出来ます。カスタム値を使った機械学習モデルを作成して評価に使いたい場合もオプション指定が可能です。

特徴抽出 デフォルト設定の機械学習モデル作成ウィザードを使うことにより、Amazon Machine Learningがデータに基づいて提示するデフォルトの特徴抽出処理を使うことが出来ます。

機械学習モデル作成ウィザードのカスタム設定を使用し、特徴抽出レシピと組み合わせて使う事により、任意の特徴抽出処理を指定する事も出来ます。

モデルの訓練 Amazon Machine Learningのモデル作成ウィザードを使用します。
モデルパラメータの選択 Amazon Machine Learningでは、3つのパラメータを調整する事が出来ます。 ・パスの数 ・正則化 ・モデルのサイズ 機械学習モデルを作成し、カスタム設定を使用する際に設定出来ます。
モデルパフォーマンスの評価 評価作成ウィザードを使用します。
特徴選択 機械学習モデル作成の際にL1正則化パラメータを選択すると、学習アルゴリズムは、その学習プロセスにあまり寄与しない特徴を削除出来ます。
予測のスコア閾値設定 ビジネスアプリケーションに基づき閾値を設定した異なるスコア閾値での評価レポートで、モデルの予測パフォーマンスを確認・比較する事が出来ます。
モデルの利用 Amazon Machine Learningでは、予測をバッチ予測作成ウィザードを使用する事で観測データのバッチ予測を取得するためのモデルを作成し、使う事が出来ます。

また、リアルタイム予測の為の機械学習モデルを有効にして予測API(Predict API)を使う事により、オンライン低レイテンシ環境下での予測を取得するモデルを作成し、使う事が出来ます。

まとめ

かなりの長編エントリとなってしまいましたが、ひと通り読んだ内容を1エントリに詰め込みました!正直なところ全てのトピックに対して100%の理解度を得るまでには至っていませんが、取っ掛かりとなる部分の学びはこのエントリをまとめるにあたり出来たような気もしますので、今後更なる学習と実践を重ねてAmazon Machine Learning及び機械学習・統計学について理解を深めて行きたいと思います。当エントリをご覧の皆様にとってもそのような位置付けとなりましたら幸いです。こちらからは以上です。

参考情報: