今回は天候データをAmazon Machine Learningに流し込み3つの方法(二項分類、多項分類、回帰分析)で天気予測をしてみます。
今回は第2回として”多項分類”を利用して明日の天気を予測してみます。
早速AMLを使って天気予測をしてみましょう。
以下の実行内でも出てきますが、対象となるカテゴリーが100種類異常の場合はエラーとなります。100種類以下にするか、制限解除申請を行う必要があります。
http://docs.aws.amazon.com/machine-learning/latest/dg/reference.html?highlight=limits#system-limits
操作編
1. データの準備
前回と同じデータを利用します。
この時に前回の1を実行済みの前提となります。
Multiclass classification(多値分類・多項分類) 翌日の「天気概況(昼:06時〜18時)」を入れ、multiclass.csvという名称で保存します。
前回同様先頭行に日本語の項目名がある場合は削除して下さい。
保存後に必ずエンコードをShift-JISからUTF-8に変更して下さい。
※今回はTeraPadで再度開き、文字コードを指定して保存で変換しました。
文字コード:UTF-8
改行コード:LF
2. S3に準備した3つのファイルのアップロード
マネージメントコンソールからS3を選択して、ファイルをアップします。
3. AMLに遷移し、データソースの追加を行います。
初めて利用する場合は「Get Started」>「Launch」から利用できます。
既に利用したことがある場合は「Create New Datasource」を選択します。
4. 入力データの選択
input dataの画面では先ほどアップロードしたS3のファイルを選択します。なお、この画面では自動的にバケット名やファイル名を取得してくれるので、先頭から数文字入れるだけで呼び出すことが出来ます。
Datasource Nameは任意ですが、あとで管理しやすいようにMulticlass Classificationと入力しました。
Verifyが完了すると以下の画面が表示されるので、そのままContinueをクリックします。
5. データの確認
Schema画面では各項目のフォーマットのチェックをします。
特に最終行が”Categorical”になっていることを忘れずにチェックして下さい。
問題なければ「Continue」をクリックします。
6. ターゲットの選択
target画面では予測対象となるカラムの選択をします。
カラムを選択するだけで、自動的に方法が選択されます。今回はCategoricalデータを指定したため「Multiclass Classification」が選択されました。
次にRow IDの選択がありますが、機械学習には影響しないとのことで特に選択しないで「Review」をクリックします。
7. Review
Review画面でチェックして特に問題なければ、そのまま「Finish」をクリックします。
Data reportが表示され、一定時間でcompleteになります。
上図にあるように一部データに欠損があったようです。
8. データの確認
Target distributionsでターゲットとする項目の分布を確認することが出来ます。今回のデータでは、晴れや雨の日数を確認することが出来ます。
9. 機械学習モデルの作成
Datasourceから先ほど作成した”Multiclass Classification”にチェックをして「Create ML Model」をクリックします。
10. モデル作成のための設定
11. Review
Review画面でチェックして特に問題なければ、そのまま「Finish」をクリックします。
Defaultの場合、Recipeは実行されるまで表示されません。
実行すると”ML model report”の画面に遷移し、一定時間でFailedとなります。
これは冒頭にも記載したとおり”Number of classes for multiclass ML models”の100個の制限に引っかかり「Cannot train model. Number of classes in this request is more than the maximum allow limit for your account(100)」と表示されております。
対策としては
・100種類以下にする
・制限解除申請を行う
のいずれかを行う必要があります。
今回はレコードの件数に対してカテゴリが多いので、出現頻度の高い方から100種類のみ残して、再度実行してみます。
12. カテゴリを100種類にして再実行
二項分類の場合、AUCという評価でしたが、多項分類の場合F値となっております。
Baselineより高い評価が付いているのが確認できます。
13. 評価詳細の確認
青い(予想が正しい)部分が非常に少ないです。
赤い(予想が正しくない)部分が多く、非常に精度が低いです。
レコード数が2000程度に対してカテゴリが100あるので、データが十分で無いことが原因と思われます。
もう少し精度を上げるためにデータを加工してチューニングしてみましょう。
チューニング編
1. データの加工
このままのデータでは分類が多すぎるので以下のように成形しました。
“一時”、”時々” は全て “時々” に統合
1つの予報に2つ以上の天気がある場合は、最後を削除(◯◯後△時々× ⇒ ◯◯後△)
⇒47種類になりました。
2. モデル化&評価
再度同じようにデータからモデルを作成し、評価をしてみました。
先ほどと比べるとかなり数値が良くなっていることが確認できます。
3. 評価詳細の確認
実際「晴」の日の内「晴」と予想されているのが58.33%となっており、晴れの日の予測としての精度はそこそこ良さそうです。
また、前回と比べると青い部分が増えていることが確認できます。
上図の項目名にある晴と快晴や曇と薄曇など似たような天気を別々にしているので、この部分をまとめたり、「時々」「一時」等の場合は後ろの天気を削除することで、より高い精度にすることが可能です。
天気を正確に当てる事はできなくなりますが、晴なのか雨なのか曇なのかの様にシンプルにすることで精度を上げることが出来ます。
レシピと評価の確認
同じデータを一部加工しただけで、どちらもDefaultで自動でRecipeを作成していますが、Model作成時のレシピの値が変わります。
同じレシピで検証はしておりませんが、データが少し変わるだけでもRecipeが変わるほどで、人がチューニングするのが難しいことがわかります。
いかがでしたでしょうか?
今回は「多項分類(Multiclass Classification)」を利用して、”明日の天気”を予想しました。
次回は「回帰分析(Numeric Regresssion)」を利用して、”明日の気温“を予想します。
ナレコムクラウドでは機械学習を含めたAIやロボットといった事に興味があるエンジニアを募集しております。未経験の方でも興味がある方はお気軽にお問い合せ下さい。
◯Amazon Machine Learning
第1回
Amazon Machine Learningを理解するために3つの方法で天気予測をしてみた(二項分類編)
第2回
Amazon Machine Learningを理解するために3つの方法で天気予測をしてみた(多項分類編)
第3回
Amazon Machine Learningを理解するために3つの方法で天気予測をしてみた(回帰分析編)