Azure Machine Learningで予測してみる

Azure MLはクラウドベースの機械学習実行基盤で、モデルの作成、評価、作成した分析モデルのWebサービス化まで行うための環境となっています。

Azure MLはグラフィカルなユーザインターフェースによりモジュールを配置し、マウス操作にてモジュールを線で結んでフローを作り上げることで予測モデルの作成、評価が行えます。これら一連の操作はWebベースの開発ツール上で簡単に行えるという点が特徴のひとつと言えます。

今回、題材として、ある程度の相関関係が見込める日経平均、株価などを考えましたが、せっかくお正月ですので題材はゆるくナンバーズ3の出目予測としました。
あくまでもAzure MLを試すのが目的ですので、ナンバーズを当てるというものではありません。(ついでに当たったら嬉しいな)
後編のチュートリアルにて実装した環境に対し多様な説明変数を与え、いろいろな予測を楽しめるかと思います。もしかすると思いもよらない相関を発見できるかもしれませんね。(その時はこっそり教えてくださいね(笑))

3つの数字を予測

では、3つの数字を予測してみます。Azureでは「アルゴリズムを選択」、「予測モデルを構築」、「評価用データで予測」が最低限のステップとなります。

学習用データは、ナンバーズ3の過去の抽選番号がネット上に公開されていますので、それを使用します。評価用のデータは、学習データの一部を使用し評価します。

予測方法

予測は下記2つとしました。(勝手に命名)

【六曜方式】
六曜から出目を予測する方法とし、過去の出目と六曜の組合せを学習データとする。尚、六曜は先勝を1として順に番号を割り当て赤口を6とした。(先勝(1)、友引(2)、先負(3)、仏滅(4)、大安(5)、赤口(6))

【差分方式】
出目と前回の出目の差分を学習データとし、次の差分を予測するモデルを構築する。この予測によって得られた差分を最新の出目に加えて次の出目を算出します。

六曜方式

まずは六曜方式ですが、Azureのワークスペース上に構築した予測モデルは下記となります。

学習データ:50件(正解データ(出目)と抽選日の六曜)
予測:抽選日の六曜から百の位、十の位、一の位の数字を予測

  • 50件データ(六曜)/ 学習データ(CSV形式)
  • Linear Regression / アルゴリズムとして、とりあえず線形回帰を指定
  • Train Model / 学習データとアルゴリズムから構築した予測モデル
  • Score Model / 予測評価を行うモデル

下図は百の位の差分を予測しています。ここでは学習データを使いTrain Modelを構築し、同じ学習データ(全件)にて予測を行っています。

予測結果の一部を示します。

出目の予測結果ですが、ほとんど外してます・・・あらら。

次にAzure MLの機能を使い正解データ(100の位)予測値(Scored Label)の分布を確認してみると、なんだか線形にはほど遠く予測が難しい事がわかります。(まぁ、題材がナンバーズなので、こんなもんですかね)

十分な学習データではありませんが、出目と六曜に関する相関関係を計算したところ下記のとおり、数学的には相関はなさそうです。(0.2未満は相関が無い)

出目 六曜との相関
百の位 0.19
十の位 -0.04
一の位 0.16

差分方式

実は六曜方式で記事を締めよう思っていましたが、出目の予測がイマイチなので視点を変えてもう少し予測をやってみます。
やはりここは歴史に学ぶ。という事で過去の出目を使って予測する方法とします。といっても難しい事はなく「出目」と「前回の差分」を求め学習を行い、次の差分を予測するというものです。予測によって得られた差分を最新の出目に足すことで出目の算出を行います。

事前に相関関係を調べたところ、各桁にて相関が認められましたので、差分を予測れば・・・もしかすると、もしかするかもしれません(笑)

出目 差分との相関
百の位 0.72
十の位 0.75
一の位 0.71

では、予測の結果を見てみましょう。(一部抜粋)

こちらも期待したほどではありませんでしたが、分布(下図)は六曜よりは良さそうです。学習データを増やせばもう少し誤差が小さくなるかもしれません。

正解データ(100の位差)予測した差異(Scored Label)の分布

前半のまとめ

ナンバーズ3の出目予測として「六曜方式」、「差分方式」にて予測を行う機械学習をAzure MLを使って試してみた。(構築については、後編のチュートリアルを参照)

差分方式は相関からもう少し予測できてもと思いましたが、この方式には欠点がひとつあります。それは予測した差分で求められる数字に偏りがあるという点です。

例えば、最新の出目が5の場合に差分の予測が「-5~4」の場合は、次の出目を算出できますが、この範囲外の差分が予測された場合に出目の算出ができない事態となります。この点は改良が必要ですね。(下表の灰色部分が予測できない範囲)

まぁ、予測の題材としてはこの辺にしておきましょう。このエントリの狙いは、Azure MLを使ってみることです!

ここまでで前編の記事はおしまいです。後編は差分予測についてチュートリアルを記載します。
今後の予測結果も含めお楽しみに。