【Alteryx】Assisted Modelingを使用して雲海出現予測してみた!

2021.01.14

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

こんにちは、データアナリティクス事業本部のまつおかです。

みなさんは兵庫県朝来市(あさごし)にある竹田城跡という城跡をご存知でしょうか。 そう、「天空の城」「日本のマチュピチュ」などと呼ばれているあそこです。

国史跡「竹田城跡」公式ホームページ | 朝来市

昨年11月そちらに行ってきたのですが、事前に行き方や駐車場情報を調べていたところ「雲海予報」なるものを発見しました。

勝手に雲海予報 | あさご市ポータルサイトあさぶら

竹田城跡に行くなら絶対雲海を見たい!と思っていたので、この情報めっちゃ助かる~と思うと同時に、ふと「これはついにAlteryxのAssisted Modelingを使う日が来たんじゃないの!?」という思いが。。。

ということで、やってみました!竹田城跡の雲海予測。

必要データ

調べてみたところ(他にも色々あるようですが)以下の条件が揃えば雲海が出る可能性が高いんだそうです。

  • 前日の日中の気温・湿度ともに高い
  • 前日の日中と当日早朝の気温差が大きい
  • 当日の天気が良くて冷え込み、風がない

以上より、気象庁のページ から以下のデータをダウンロードしました。

  • 前日データ(日別データをダウンロード)
    最高気温、日照時間、降水量合計
  • 当日データ(時間別データをダウンロードし、朝6時のデータのみを抽出)
    気温、降水量、風速、風向

竹田城跡で気象データは観測されていないため、ダウンロード対象地点は竹田城跡周辺かつ標高も近い「生野」としています。また、生野では湿度データが観測されていないため、湿度と雲海結果のデータは 雲海予報ページ から取得することにしました。

雲海結果データは2016年~2020年の10月~11月までですので、気象データもその間のものをダウンロードしています。

データ加工

まず各データを加工します。加工部分のワークフローはこちら。

当日データ加工

①フィルターツールで朝6時の行(「時」列が6の行)を抽出し、②フォーミュラツールで年、月、日それぞれで列が分かれている日付をDate型に変換、前日データと結合するため前日の日付を作成します。また不要な列も除外します。

加工後のデータがこちら。

前日データ加工

フィルターツールで複数行にまたがったヘッダーの不要な行を除き、当日データ同様フォーミュラツールで日付をDate型に変換、不要な列を除外します。

加工後のデータがこちら。

当日データ+前日データ

③結合ツールで当日データの「前日」と前日データの「前日」をキーに結合します。

その後、④フォーミュラツールで当日朝と前日との気温差を計算した項目を追加します。

湿度、雲海結果ダウンロード&加工

雲海予報ページ では必要なデータが以下のような表になっており、年月ごとにタブが別れています。

ダウンロードツールを使用してここからデータを取得します。

まずテキスト入力ツールにURLを入れて、

ダウンロードツールでデータを取得します。

取得したHTMLデータを確認したところ、年月ごとにタブで分かれているデータも幸い一度でダウンロードすることができていました。
「DownloadData」という列にHTMLが入っています。

次に必要なデータ部分を抽出します。今回対象となるデータは<tr></tr>で囲まれた部分となりますので、正規表現ツールを使用してその部分を抜き出し、さらに行に分割します。

<tr></tr>で囲まれた部分を抜き出して分割したデータは以下のようになっています。

<th>2020.11.01 (<span class=""sun"">日</span>)</th>  
<td class=""text-center""><img src=""https://www.asabura.jp/wp-content/themes/asabura/img/icon/weather/03d.png"" title=""scattered clouds "">1.96 m/s</td>  
<td class=""text-center""><span class=""temp_max"">20 ℃</span> / <span class=""temp_min"">9 ℃</span>86 %</td>  
<td class=""text-center"">期待できる</td>  
<td class=""text-center"">出てない</td>

(WEBページではこのように表示)

これを正規表現ツールを使ってさらに分割します。

正規表現欄は以下のように入力してあります(な、ながい・・・)。

<th>(.*?) \(<span.*?title=\"(.*?) \">.*?<br>(.*?) m/s</td>.*?temp_max\">(.*?) ℃</span>.*?temp_min\">(.*?) ℃</span><br>(.*?) %</td><td class=\"text-center\">(.*?)</td><td class=\"text-center\">(.*?)</td>

これで各項目が分割できました!

あとは日時ツールを使用し日付をDate型に変換し、必要な列のみにすればOKです。

日別データ+湿度+雲海結果

⑤結合ツールで最初に作成した日別のデータに湿度を追加します。湿度は前日のデータが必要になるため、結合キーは日別データの「前日」と、湿度、雲海結果データの「日」になります。

次の⑥結合ツールで雲海結果を追加します。この場合の結合キーは日別データの「当日」と湿度、雲海結果データの「日」です。

これでデータの準備が完了しました。

アシスト付モデリング(Assisted Modeling)を使ってみよう!

さて、ここからがいよいよ本題となります。

モデリングの作成には、私が竹田城跡を訪れた2020年11月15日以外のデータを使用したいと思いますので、まずはフィルターツールを使用しデータを振り分けます。また、アシスト付モデリングツールでは日付型のデータは扱えないため、当日、前日の項目は除外します。

アシスト付モデリングを開始する前には一度ワークフローを実行しておく必要がありますので、一旦ワークフローを実行してから「アシスト付きモデリングを開始」ボタンをクリックして開始します。

各プロセスの説明画面が表示されますので「構築を開始する」ボタンをクリックして進めます。(「チュートリアルを再度表示しないでください」にチェックを入れることで次回以降この画面をスキップすることが可能です)

ステップ1:ターゲットとして使用したい列を選択します。
今回のターゲットとなる「雲海結果」を選択します。

この先に進むとターゲットの変更ができないため、確認画面が表示されますので選択したターゲットに間違いがないか確認し「続行」ボタンをクリックします。

ステップ2:データ型を設定します。
推奨されたデータ型が表示されていますので、そちらで問題がないか確認します。各項目を選択すると右側にどのようなデータが含まれているか確認することができます。データ型は「ID」「数値」「カテゴリ別」の3種類となります。

ステップ3:欠落値を整理します。
欠落値がある場合はどのように扱うかをここで設定できるのですが、今回使用したデータには欠落値がない綺麗なデータだったので何もせず次に進めます。

ステップ4:特徴量を選択します。
推論で使用する値をここで選択します。今回は必要なデータのみを使用していますので、全てにチェックを入れます。

ステップ5:アルゴリズムを選択します。
どのアルゴリズムを使うかを選択するのですが、今回は全てにチェックを入れました。使用可能なアルゴリズムは「決定木」「ランダムフォレスト」「XGBoost」の3つです。

そして「選択したアルゴリズムを実行」ボタンをクリックすると・・・

結果が出ました!

今回は正解率と均衡のとれた正解率がいちばん高くい「ランダムフォレスト」をモデルとして作成します。

ランダムフォレストにチェックを入れ、左下の「モデルを追加してワークフローに進む」ボタンをクリックします。すると、アシスト付きモデリングツールのあとに、ランダムフォレストを使用した処理が自動で作成されました。

では、自動作成されたワークフローの最後に配置されている予測ツールの「D」側に、フィルタツールで分けておいた2020年11月15日のデータを接続し、推論してみましょう!
どきどき・・・

推論結果はターゲット名のあとに「_predicted」がついた列に出力されます。

推論の結果は・・・「出てない」!!

実際の結果は・・・「最高の雲海」!!

でした。。。

雲海結果には「出てない」「うっすら」「雨霧雲海」「雲海」「最高の雲海」の4カテゴリあるのですが、予測結果にはそれぞれの結果になる確率も出力されており、その中でいちばん確率の高い結果が予測結果として表示されます。
今回の結果を見ると「最高の雲海」は「出てない」の次に確率が高かったので、もう少し何かの特徴量を追加すれば精度が上がるのかもしれません。

さいごに

今回は機械学習超初心者の私が予測モデルの作成に挑戦してみましたが、モデルの作成自体は非常に簡単にできるのでとても便利&感動です。
ただ、予測精度を上げるためにどんな特徴量を含めるべきなのか試行錯誤に時間がかかりました。が、それ自体は予測モデルを作成する上で重要なプロセスですし、あれこれ試しても結果がすぐに見られるので何のストレスもなく進めることができました。

おまけ

竹田城跡を訪れた日の雲海予報ページでの予測は「やや期待できる」でしたが、実際はとても素晴らしい雲海を拝むことができました。
こちらのご紹介した雲海予報ページでは秋の時期だけ予報を出されているようですが、春も雲海を見られるチャンスはあるようです。ぜひ過去のデータで予測しつつ、美しい景色を見に訪れてみてください!(本ブログのアイキャッチと下の写真は2020/11/15に訪れた際に撮影したものです)