Alteryxを使ってサザエさんじゃんけんの予測に挑戦してみた

2020.07.07

こんにちは、データアナリティクス事業本部ソリューション部プリセールススペシャリストの兼本です。

本日7月7日はクラスメソッド創業16年目の記念日です。
思い返せば昨年の創業記念日には、Alteryxを使って今期(FY2020)の売上を予測し、弊社上層部からタイトルが生々しすぎるというお叱りタイトルをちょっと変えたほうがいいよというアドバイスをいただきました。

あの時はFY2020の売り上げを201億円と雑に予測しましたが、お陰様でよいほうに期待を裏切る結果となりました。

これもひとえにお客様とブログを読んでいただいている未来のお客様のおかげです。ありがとうございます。

今年は来期の売上を予測……とも考えたのですが、同じことをしても面白くないので先日リリースされたばかりのAlteryx2020.2の新機能である Intelligence Suite の Assisted Modeling を利用してサザエさんじゃんけんの予測に挑戦したいと思います。

サザエさんじゃんけんとは

サザエさんじゃんけんについては、以下サイトをご覧いただくのがわかりやすいと思います。

2020年6月7日の放送ではサザエさん史上初となる「5週連続同じ手(パー)」が出され、世間を賑わしたことが記憶に新しいですね。
実は弊社でも今を遡ること数年前にAmazon Machine Learningでサザエさんじゃんけんを予測するというエントリがありました。

Alteryx Intelligence Suite とは

Alteryx 2020.2から新たにAlteryx Designerのアドオンとしてリリースされた新機能で、導入すると「Machine Learning」カテゴリと「Text Mining」カテゴリが使えるようになります。
特にMachine Learningカテゴリでは、機械学習を実行するためのワークフロー作成をステップバイステップで作成可能な Assisted Modeling という機能が利用できます。

詳しく知りたいという方、まずは現在開催中のDevelopers.IO 2020 Connectで弊社じょんすみすによるライブセッション(録画)の視聴がおススメです。

やってみた

それでは、Alteryxを使ってサザエさんじゃんけんの予測をしてみましょう。

データ前処理

予測分析をする前に必ず必要になるのがデータ前処理ですね。
じゃんけんのデータはサザエさんの過去の手一覧を利用させていただき、このデータをWebスクレイピングしたうえで、分析用の前処理をします。

  • 作成したワークフローはこちら:

  • ダウンロードツールを使用してHTMLデータを取得します。元データがShift-JISですので、エンコーディングとしてJapanese Shift-JISを選択しています。

なお、Webスクレイピングやサービスとの連携をする際は、ワークフローのキャッシュ実行をしておくと2回目以降の実行時はサーバにアクセスせずローカルにキャッシュしたデータを使うので、パフォーマンス的にもサーバに不要な負荷を掛けないという意味でもお奨めです。

  • 取得したHTMLデータを改行のタイミングで行分割します。  

  • ここまでの処理で以下のようなデータになりました。

  • ほしいのは「第xxxx回 yy.MM.dd [パー|グー|チョキ]<BR>」の行だけなので、フィルタツールを使ってデータをフィルタリングします。

  • 「第xxxx回 yy.MM.dd [パー|グー|チョキ]<BR>」のデータに対して列分割を行います。区切り文字として「\t」「(」「<」を指定します。「(」は、僅かに「チョキ(観月ありさ)」といったデータがあるために使用しています。

  • 分割したデータのうち、放送回を示すデータと日付データの前処理のためにフォーミュラツールを使います。日付データの処理は実際にはこの後の日時ツールで行うのですが、オリジナルのデータに「91.11.31」という存在しない日付データを見つけたので、このデータだけ個別に処理しています。

  • 日時ツールは日付を示す文字列から日付型のデータを生成するために使用しました。

  • セレクトツールを使用して、不要になったフィールドを削除し、わかりやすいフィールド名を付与します。

  • 予測モデルを作成するにあたって、今回は過去の手から次の手を予測する手法を取りたいので、複数行フォーミュラを使用して現在のレコードに対して過去の手を付与します。今回は遡りたい過去の手の回数分、同様の処理を追加しています。

Assisted Modeling によるモデルの構築

それでは、Assisted Modeling を使用してモデルの構築を行います。ちょっとツールの説明が長いですが、要するに機械学習を実行するためのワークフロー作成をステップバイステップで行えます。

  • Assisted Modeling を配置したら一度ワークフローを実行する必要があります。このタイミングでAlteryxは入力されたデータに関する学習を行います。

  • 実は今回のデータを入力したところ、以下のようなエラーが発生してしまいました。現時点では日付型、Blob型、空間オブジェクト型をサポートしていないので注意が必要です。以降の処理では放送回のデータを除外しています。

  • Assisted Modeling を起動すると以下のようなダイアログが表示されます。

  • 「構築の開始」ボタンを押下するとターゲットの選択をします。ターゲットにはじゃんけんの結果を示す「target」フィールドを指定します。

  • 次の画面では入力データそれぞれに対してデータ型の設定を行います。過去の手「result1」「result2」はそれぞれカテゴリ型として使用することが推奨されていることがわかります。

  • 次の画面では欠損値の処理について確認をしています。ここでは、最頻値に置換、特徴量を削除などいくつかのオプションを選択できますが、今回はデフォルトの定数に置換を選択します。

  • 次の画面では予測に使用するフィールドの選択ができます。放送回を示すIDフィールドはターゲットとの関連性が極めて高いという評価を受けており、最初から非選択状態になっています。

  • 使用するアルゴリズムを選択します。今回は3つすべてのアルゴリズムを評価します。

  • 右下の「選択したアルゴリズムを実行」ボタンを押下すると入力データを使用してアルゴリズムを実行して、その結果を表示します。今回はアルゴリズムによる差はほぼありませんでしたが、僅差でランダムフォレストが最適となりました。

  • 生成されたモデルを選択して「モデルを追加してワークフローに進む」ボタンを押下すると、これまでのステップで作成した予測に関するワークフローが追加されます。

  • 元データを入力して予測モデルの評価をします。ワークフローを実行すると以下のような結果になりました。Target_predictedには予測結果の手が、Target_xxフィールドにはグー、チョキ、パー、それぞれの手になる確率が出力されています。

  • TargetとTarget_predictedが一致する場合を1、不一致を0とした場合の正解率は以下の通りです。制度はあまり高くないですが、アルゴリズム作成時の予測精度とだいたい同じになりましたね。

折角なので、過去の手を5回、10回に増やした予測も実施してみました。

  • 過去の手を5回まで評価したときのAssisted Modeling の結果と正解率

  • 過去の手を10回まで評価したときのAssisted Modeling の結果と正解率

最前線でサザエさんじゃんけんの研究をされている方は、勝率8割を叩き出す方もいるそうですので、ここからチューニングを施す必要がありそうですが、機械学習のアルゴリズムや手法、プログラミングを行ずともここまでできるのが、 Assisted Modeling の強みではないでしょうか。

作成したワークフローは最終的に以下のようになりましたが、ほとんどの処理はAssisted Modeling が自動生成したものなので、今回、私は基本的な前処理しかしていません。

まとめ

いかがでしたでしょうか。
現在のバージョンでは日付データや空間データに未対応であったり、選択可能なアルゴリズムも少ないという制約もあるものの、Alteryx Intelligence Suiteを利用することで、プログラミングすることなく機械学習を使った予測分析にチャレンジすることができます。
非常に将来が楽しみな新機能ですので、ぜひこの機会にAlteryxを体験してください。

以上、最後までお読みいただきありがとうございました。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400