機械学習をしよう(Intelligence Suite編): Machine Learning – 今日からはじめるAlteryx再入門アドベントカレンダー
こんにちは、ソリューション部・新納(にいの)です。
当エントリは2020年アドベントカレンダー『今日からはじめるAlteryx再入門』の19日目のエントリです。本日12/19が私の誕生日だと言ったらいつの間にかアドベントカレンダーの担当日にされていました。みなさん、これがクラスメソッドという会社です。
このアドベントカレンダーの企画は、Developers.IOにてAlteryxの情報をお届けしてきたメンバーによるAlteryxを1から学べるシリーズになっています。Alteryx触ってみたい!という方の入門記事として、Alteryx使っているけど改めて基礎から学びたい!という方の再入門記事としてご活用いただければ幸いです。
19日目の今日は「機械学習をしよう(Intelligence Suite編): Machine Learning」をお届けします。
前提
本エントリの執筆にあたって使用した環境は以下の通り。
- Alteryx Designer 2020.4 non-Admin版
そもそもIntelligence Suiteとは
ガイドに沿って機械学習モデルの作成や自然言語処理を実施できる機能群です。Alteryx Designer 2020.2から登場したアドオンであり、利用には別途ライセンスの購入が必要となります。従来であればこのような処理はデータサイエンティストがプログラムを書いて実装してきましたが、Intelligence Suiteを使えばドラッグアンドドロップしてクリックして実装できるという優れものです。いい時代になったものですね。
Intelligence SuiteのライセンスをアクティベートするとツールパレットにMachine LearningとText Miningのカテゴリが表示されます。
以下の動画でもAlteryx ACEのじょんすみすがデモを交えてご紹介しています。
本エントリではMachine Learningカテゴリのご紹介をします。ちょっとMachine Learningを使うまでの前置きが長いので「とにかく早く使ってるところを見たい!」という場合は「機械学習やってみた」に飛んでください。
機械学習、どうやって始めたらいいの…?
初心者にとってIntelligence Suiteは機械学習の世界に足を踏み入れるいいとっかかりとなります。ですが、Intelligence Suiteをいきなり与えられても突然機械学習に詳しくなるわけでも悩みが解決するわけでもありませんよね。初心者はそもそも「機械学習の始め方」がわからず、とりあえず触ってみるにしても何をしたらいいのか悩むことがあるかと思います。
そんな時は「機械学習で解決できそうな課題」を考えてみるところからスタートしてみてはいかがでしょうか。機械学習の基本的な流れは、
- データに基づいて未来の事象を予測
- 結果に基づいて意思決定をする
です。このポイントを踏まえて考えると身近で解決したい課題や知りたいこと、予測に必要なデータが浮かんでくるのではないでしょうか。
2020年12月19日の平均気温を予測する
と、偉そうに語ってしまいましたが、結局私がIntelligence Suiteを使って何をやりたいかというと「2020年12月19日の奈良県奈良市針町の平均気温を予測する」です。この結果をもっては私の誕生日に外に出るか家で過ごすか決めたいと思います。
針町を選んだ理由は奈良県最強の道の駅、針テラスがあり、私の実家にほど近いからです。『T・R・S』という文字を見たら音響端子のフォーンプラグではなく「針テラスだ!」と脊髄反射で叫ぶ奈良県民も多いのではないでしょうか。温泉ありコンビニありで何でも手に入る針テラス、『有』が有り、『無』が無いといっても過言ではありません(※個人の見解です)。奈良県にバイクや車でお越しの際はぜひお立ち寄りの上、ソフトクリームを召し上がってください。
データは気象庁が公開している「過去の気象データ」を利用します。
項目 | 説明 |
---|---|
取得日時 | 2020年12月9日 |
観測場所 | 奈良県奈良市針町 |
取得期間 | 1991年~2019年の12月1日~12月19日 |
取得項目 | 年月日,平均気温(℃),最高気温(℃),最低気温(℃),降水量の合計(mm),日照時間(時間),降雪量合計(cm),平均風速(m/s) |
機械学習やってみた
ワークフローの完成図は以下の通り。
前処理
前半部分では気象データの整形を行っています。28年分の12月1日~12月19日までのデータがあるので、全部で28レコード生成されるよう日付ごとに取得項目を列として持たせます。「平均気温_01」のような形で項目名と日付がセットになった列を生成しました。
今回予測したいのは2020年12月19日の平均気温ですので、平均気温以外の19日の項目はセレクトツールで除外しておきます。後からガイドに沿って調整はできますが、モデルを作成する前にNull値には各項目の中央値を格納しておくようにします。
モデル作成をする前に、サンプル作成ツールで学習用・検証用のデータに分けます。学習用のデータ(Eアンカー)をもとにして機械学習モデルを生成し、モデル生成に使用しなかった検証用のデータ(Vアンカー)は後から未知のデータとして扱い、予測がうまくできているか確認するために使用します。なお、この後で登場するアシスト付モデリングツールはデータが20レコード以上ないと学習してくれないので適宜レコード数は調整しましょう。
機械学習モデルを生成
データが準備できたら早速機械学習(Machine Learning)タブからアシスト付モデリングツール(Assisted Modeling tool)をつなげてみましょう。このツールが起点となり、設定が完了すると自動で関連ツールが組み立てられます。
アシスト付モデリングツールではガイド付きでモデルを構築する「アシスト付き」かガイド無しで構築する「エキスパート」モードの2つがあります。アシスト付きを選択した場合は一度ワークフローを実行してから「アシストモデリングを開始する」を選択してください。
最初は各ステップで何をすればいいのかのチュートリアルを確認できます。一通り確認したら「構築を開始する」からモデル構築を始めましょう。
ターゲットと機械学習メソッドを選択
ステップ1では、ターゲット変数として使用したい(予測したい)項目と、回帰か分類どちらかのメソッドを選択します。ターゲット変数のデータ型が数値型だと回帰に、文字列型だと分類にデフォルトで設定されます。今回は予測したい19日の平均気温を指定しています。
自動化レベルを選択
モデル生成をどの程度Intelligence Suiteにお任せするかどうかを選べます。「ステップバイステップ」ではこの後のステップもガイドに沿って値を決定しながら進めることができ、「自動」を選ぶとすべて推奨値のまま最後の結果出力まで進んでくれます。今回は途中のステップも見せるためにステップバイステップを選択しています。
データ型を設定
前処理の段階でもセレクトツールで決定できますが、アシスト付モデリングツールのガイド内でも項目ごとのデータ型を変更できます。なお、このあたりから用語がわからなくなったら右ペインの「用語集」から意味を確認できます。親切設計です。
欠落値を整理
ターゲット変数の予測に使用する値である特徴量にNullなどの欠落値がある場合の扱いを決められます。欠落値を除外、中央値を設定、固定値を設定などといった方法での補完を選択できます。今回は事前にインピュテーションツールで欠落値を補完済なので特に対応は必要ありません。
特徴量を選択
モデル生成に使用する特徴量を選択します。予測に使用される特徴量は何でもあればあるほど良い……というわけではありません。ターゲット変数との関連性が極端に高かったり低かったりすると、出来上がったモデルの予測精度が下がってしまいます。そうならないよう、このステップでは最小二乗法 (OLS) を使って自動で算出した関連度合いからモデル生成に使用する特徴量を選びます。ターゲットとの関連性が極端に高い・低いものに関してはデフォルトで使用しないようチェックが外されます。
アルゴリズムを選択
決定木、線形回帰、ランダムフォレストの3つから、モデル生成に使用するアルゴリズムを選択します。「どれが最適かなんてわからない!」という場合でも、各アルゴリズムのメリット/デメリットや定義、ユースケースが記載されているので参考にして選択できます。実行に多少時間はかかりますが、すべて選択して結果を見てから使用する手法を選択するのも一つの手です。
リーダーボードで結果を見てみる
アシスト付モデリングツール最後のステップで、これまでの総まとめが確認できます。
比較タブ
前項で選択したアルゴリズムをRMSE、相関、MAE、最大誤差といった値で比較します。各指標の意味や、どうやって判断すればいいかは右ペインの用語集から確認できます。アシスト付モデリングツールおすすめのアルゴリズムには水色のリボンマークがつきます。
概要タブ
各アルゴリズムのモデルが出力した予測値に対する実測値のプロットを確認できます。ポイントが線上に近く分布していると、そのモデルのエラースコアは低いことを意味しています。
解釈タブ
各特徴量が予測にどれだけ寄与したか(重要度)を確認できます。
設定タブ
各特徴量のデータ型、欠落値の扱い、特徴量の扱い、各アルゴリズムのRMSEが確認できます。
リーダーボードから得られるこれらの情報からどのアルゴリズムを使用するか決めたら、左ペインのチェックボックスにチェックを入れて「新しいモデルを作成」を押します。今回はRMSEが一番低いランダムフォレストを選択しました。
ワークフローに戻ると、ガイドに沿って設定した内容で一連の処理がツールとなって挿入されています。なお、アシスト付モデリングツールの最初の設定で「エキスパート」を選択するとこれら一連の処理を手動でツールを配置しながら作成することになります。
モデルを使って推論する
前処理編でサンプル作成ツールを使い、学習用・検証用にデータを分けたのを覚えているでしょうか。モデル作成には学習用データを使いましたが、以下の検証データを未知のデータとして、前項で生成された予測ツールのDアンカーに入力します。
この状態でワークフローを実行すると、「ターゲット変数として使用した項目名_predicted」という項目が生成されています。各レコードの値を使って19日の平均気温を予想した結果が格納されています。
これらの結果を使ってRMSEを求めてみましょう。以下の処理をAlteryxで表現していきます。
まずはフォーミュラツールで予測値と実際の値の差を二乗します。
POW([実測値]-[予測値], 2)
平均値をとります。
平均したものルートを取るとRMSEが算出できました。結果を見ると、だいたい±2.7°くらいの誤差は発生しそうです。
インタラクティブチャートを使えば予測値と実測値のプロットも作成可能です。このプロットを見る限り、12月19日の奈良市針町の平均気温は2°~4°くらいになりそうですね。とんでもなく寒そうです。この日の外出はやめておくことにします。
まとめ
Intelligence SuiteのMachine Learningを使用して機械学習をやってみました。データ件数が少ないわりに特徴子がかなり多いということもあり、あまり精度の良くないモデルとはなりましたが、初心者の私が機械学習について学びながらモデル作成できました。
もしよかったら本日19日の奈良県奈良市針町のお天気をチェックしてみてください。ちなみに12月16日時点で10日間天気予報を確認したところ、平均気温は6°になる見込みです。寒そうですね。絶対に外出しません。