Azure Machine Learning 回帰分析
回帰分析とは
機械学習における回帰分析とは、関連性があると思われるさまざまなデータからある値を予測できるようにする学習をいいます。
例)店舗別商品別の在庫予測や売上予測
Azure Machine Learningの場合、すでに用意されている回帰分析モジュールを使って機械学習モデルを作成することが可能です。
Azure Machine Learningで利用可能な回帰分析モジュール
- Ordinal Regression(順序回帰)
- Position Regression(ポアソン回帰)
- Fast Forest Quantile Regression(高速フォレスト分位点回帰)
- Linear Regression(線形回帰)
- Bayesian Linear Regression(ベイズ線形回帰)
- Neural Network Regression(ニューラルネットワーク回帰)
- Decision Forest Regression(決定フォレスト回帰)
- Boosted Decision Tree Regression(ブースト決定木回帰)
結果評価方法について
回帰における評価方法
① Evaluate Modelで確認する
評価対象データの実測値と予測値の差(誤差)をもとに評価する基準となる指標は以下の通りです。
[0に近いほど分析精度が高い]
・MAE(平均誤差) 実測値と予測値の差の絶対値を平均した値
・RMSE(平均二乗誤差) 誤差の二乗の平均値の平方根
・RAE(相対絶対誤差) MAEを正規化し、0から1の間で表したもの
・RSE(相対二乗誤差) RMSEを正規化し、0から1の間で表したもの
[1に近いほど分析精度が高い]
・決定係数(COD) 予測値と正解値のズレを、0から1の間で表したもの
②Permutation Feature Importanceで確認する
各属性の寄与度を出力して確認する
利用時は、Score Modelと代替します
③Compute Linear Correlation で確認する
各属性間の単純な相関を見てみる(-1 〜 1)
利用時は、Score Modelと代替します
参考)Azure Machine Learning に対する よくある質問の補足
④過学習していないかどうか
過学習とは、学習データの特性に合わせすぎて、結果、汎用化できなかった状況をさします。
学習データとテストデータの精度の差が大きくなります。
過学習がおきやすい要因としては、
・学習データが少ない
・説明変数の数が多すぎた
・機械学習のアルゴリズムが複雑すぎる
などの要因で起こりえます。
過学習の確認はどうするか?
学習データの精度が異常に高い場合は要注意です。
この場合は、過学習が起こっている可能性が高いです。
対応方法1)アルゴリズムの変更
対応方法2)数値幅の大きいカラムを区分化(正規化)
例) 10,000円〜100,000円 → A10
100,001円〜200,000円 → A20
数値幅の大きいカラムに影響を受けやすいためコード化します
対応方法3)パラメータの変更(正規化)
対応方法4)説明変数を見直す(削減)
対応方法5)学習データの追加
今回、作成する機械学習モデルはこちら
それでは、早速、Azure Machine Learningを使った回帰分析を試してみたいと思います。
今回は、下記の機械学習モデルを作ります。
(1)モデルの構築
モデル構築の大きな流れは下記の通りです。
① AI素材.csv という回帰分析用のデータをセットします。※ AI素材.csv utf-8で使用すること。
② Select Columns in Dataset というモジュールを使って必要なカラムを取捨選択します。
③ Split Data モジュールを使って学習用データと検証用データにスプリットします。
④ Train Modelモジュールを使って学習結果を格納する器を用意します。
ここでは、今回は何を正解とするか、カラムで指定します。
今回予測したい値は、トランザクション数。したがって、トランザクション数を指定します。
⑤ アルゴリズムを選択して、Train Modelの左側のコネクトと接続します。
今回は、線形回帰、ニューラルネットワーク、ポアソン回帰の3つを同時に設定します。
⑥ Split Data の左側のコネクトと Train Modelの右側のコネクトと接続して学習用データを受け取ります。
⑦ Score Modelの左側のコネクトを使って、Train Modelにある学習済みモデルを受け取ります。
⑧ 同じくScore Modelの右側を使って、Split Dataの検証用データを受け取ります。
⑨ 最後に、Score Modelでの検証用データを使った検証結果をEvalueate Modelの評価指標を使って評価します。
※さまざまな調整を通して一番優れた学習済みモデルが決まったら、デプロイしてサービス運用開始します。
(2)各モジュールの詳細設定
② Select Columns in Datasetについて
このモジュールをクリックすると下記のように、カラムを取捨選択する画面が出てきます。
今回は、数量を区分で扱う選択をしてみます。
他にもセッションを区分で扱うという取捨選択もありますが、どれがベストかは経験則で判断するかもしくは実際に試して結果を確認してみたほうが早いです。
③ Split Dataについて
同じくSplit Dataモジュールをクリックすると、下記のような画面が現れます。
Fraction of rows in the first output dataset で、0.8を指定すると学習用データとして80%を使用する指定が可能です。また、Randomized splitにチェックを入れると、Random seedによって振り分けが決まります。Random seedが0の場合はシステム時刻を利用して振り分けます。
通常、回帰分析など過去のデータから未来のデータを予測する場合は、Randomized splitは使わないのが基本です。ただし、精度が逆に落ちる場合がありますのでいろいろ試して判断してください。
④ Train Modelモジュールについて
Train Modelをクリックすると、Launch column selector ボタンが出てきます。
ここをクリックすると下記のような画面が出てきます。
こちらで、正解となるカラムを指定します。
ここでは、トランザクション数を予測したいので、トランザクション数を指定すれば良いです。
⑤ アルゴリズム
各アルゴリズムの説明は下記を参考にしてください。
また、各アルゴリズムのパラメータの詳細説明は下記を参考にしてください。
このパラメータを調整することで精度を微調整することが可能です。
(3)評価してみる
① 実際の値と予測値を数値で確認する方法
Score ModelをVisualizeで確認する
Score Labelsが、実際のトランザクション数の予測値。
実際のトランザクション数との乖離具合をScatterPlotで確認できます(右下の散布図のこと)
精度が高い場合、右斜め上45度の線上にプロットされると思います。
② Evaluate Modelで用意された評価指標を使って評価してみる
Visualizeをクリックする
まず、決定係数(COE)については、0.35なのであまり精度が出ておりません。
まだまだ精度を高めていく必要があります。
ただし、ここが0.90など、高すぎる数値が出ている場合は過学習の可能性がありますので必ずしも高ければ良いというものでもありません。
実務上の経験則としては、0.60から0.70ぐらいまで上げられれば実用レベル、という所感です。
上二つの指標は、まだ誤差が大きいのでこちらも0に近づけるべく、誤差を解消するための調整が必要です。
※ このあとの精度向上は皆さんで実際にトライアンドエラーで必ず試行してみてください。
(4)精度を上げるには
前段でも説明しておりますが、
① 過去データを追加できるならさらに追加しましょう。
② 目的変数(トランザクション数)に影響を与えそうな説明変数(気象データ、イベント・キャンペーン実施データ、祝祭日フラグなど)の追加あるいは削除を検討しましょう。
③アルゴリズムをいろいろ試してみたり、大きな数値幅のあるカラムをコード化したりするなど、正規化も大事です。
④ 欠損値や外れ値を除外するなどの前処理工程も一度、見直してください。
⑤ 最後に、アルゴリズムのパラメータを変更しながら誤差を埋めていく微調整をしてください。
(5)今回のモデル間の比較
(6)各モジュールのVisualizeについて
各モジュールの下側のコネクトをクリックすると、上記同様にVisualizeという項目が覗けるようになっております。
例えば、Neural Network RegressionのVisualizeは下記のように設定値が確認できるようになっております。
他のモジュールについても、ぜひ、確認しておいてください。
(7)デプロイして予測してみる
一連の調整がうまくいった学習済みモジュールのみを残してデプロイしてサービス化しましょう。
その前に、現在までの状態を残しておくことをおすすめします。
SAVE AS として、別名保存してから作業しましょう。
SET UP WEB SERVICE のPredictive Web Service [Recommended]をクリック
RUNをクリックすると下記のようになります
そこで、DEPLOY WEB SERVICEをクリック
そうすると、当該画面へ遷移します。
TESTから実際に試行することが可能となります。
REQUEST/RESPONSE の右側のTESTをクリック
下記の画面が表示されます。
下記の通り、設定値を入力して予測する。
Scored Lablesが今回、トランザクション数の予測値となります。
数量、セッション区分は今回は不要。
なぜなら、Select Coumns in Datasetから除外しているため。
また、トランザクション数も0で良い。Test Request-Responseをクリックして実行。
(8)一個一個数値入力していると面倒なので…
その場合は、学習済みモデルを活用して、新たに下記のモデルを構築すると良いです。
まず、Trained Modelsから、(7)で生成した学習済みモデルを引っ張ってきます。
次に、予測したいデータセットを用意してください。
予測したいトランザクション数のセットは不要です(errorが出た場合は一律0(ゼロ)をセットしておけば良いです)。
そして、Select Columns in Datasetでカラム指定後、ScoreModelでそれぞれ結びましょう。
さらに、Data Format ConversionsからConvert to CSVを引っ張ってきて、Score Modelと結び、Runを実行します。
最後に、Convert to CSVからDownloadをすると今回の結果をCSVフォーマットで出力して利用できます。
まとめ
今回は、Googleアナリティクスのトランザクション数を日別で予測する機械学習モデルを構築してみました。
正直、今回ご紹介した精度では、実際には実用できません。
あとは、精度をどう上げるか。
ここの調整は、皆さんの経験則がものをいう箇所です。なんども試行していただき答えは自分で見つけてみてください。
※ データ追加なく、各種調整でCoE(決定係数)を0.49まではなんとかあげられると思います。
ちなみに、このような経験則をも機械に任せて学習させることを「強化学習」といいます。
Azure Machine Learningでは、残念ながら、この強化学習モジュールは用意されておりません。
ここをトライするには強化学習が利用可能なツールを使うしかありません。
こちらは、また別の機会でご紹介させていただきます。