がりらぼ

WindowsRuntimeの応援ブログ

Azure Machine Learningを使ってAzure界のお義父さんこと( @statemachine )が仕事する確率を予測してみた

事の発端

毎日仕事をしているかの真偽が問われているAzure界のお義父さんこと( @statemachine )さんですがもしかしてAzureならお義父さんが仕事するのかしないのかが分かるんじゃないかなと思いつきました。

Azureといえば最近こんなニュースがでましたね。

Microsoft、クラウドベースの機械学習プラットフォームAzure MLを正式リリース - TechCrunch

まあようするに強力な機械学習プラットフォームであるAzure Machine Learningに、お義父さんの特徴量を学習させてみようという話です。

何を学習させるか

さて、まずどうやってお義父さんが仕事してるかしてないかを判定するかですが、お義父さんのTwitter(@statemachine)でのツイートを利用しましょう。

機械学習させるにも、特徴量が必要となります。今回用いる特徴量としては

  • 曜日
  • 時間(時)

正解データとしては

  • 仕事しているかしていないか

とします。

どうやって仕事してるか判定するか

ツイートからどうやって仕事しているか判定するかですが、仕事に関係するツイートをしているかどうかで判定します。

まずツイートを取得しリプライかリツイートかにわけます。
そのどちらでもなかった場合、ツイート本文を形態素解析し、固有名詞を取り出します。
もし固有名詞が存在していた場合、仕事に関するツイートと判定します。
それ以外のツイートをその他と分類します。

なぜリプライとリツイートを分けてるかというと@garicchi みたいなUser IDが固有名詞に入っちゃうからです。

仕事に関係ない固有名詞がある場合は?というツッコミが入るかもしれませんが気にしちゃいけません。お義父さんのツイートはおそらく固有名詞が入るようなツイートはだいたい仕事に関係している気がします。

データ収集

Azure Machine Learning(以下Azure ML)では、学習に必要な元となる教師データをcsvで与えることができます。

というわけでJavaでサクッとツイート取得→形態素解析CSV生成をしましょう。

f:id:garicchi:20150222003134p:plain

ツイート取得はTwitter4J形態素解析Kuromojiを利用させてもらいました。

お義父さんのツイート3000ツイートを分類した結果がこんな感じ

まずは仕事をしていると思われる、固有名詞が入ったツイート f:id:garicchi:20150222004100p:plain

結構仕事以外のツイートが入ってそうな感じがしますがまあそこは仕方ないとしても全体的に見たら圧倒的に仕事ツイートが取り出せてる気がします。

その他に分類されたツイートを見てみましょう。 f:id:garicchi:20150222004210p:plain 完全に仕事以外のツイートばかり取得できました。

どうやらちゃんと仕事しているかしていないかを分類できそうです。

Azure MLによる集計

Azure MLは学習させるだけでなく、データをアップロードして統計情報を収集することもできます。

どの時間にツイートが集中しているのかを集めたデータ
横軸は時間です。メモリがテキトーなのはAzure MLの仕様です。

f:id:garicchi:20150222004722p:plain

おおよそ人間がちゃんと生活しているような時間にツイートされています。
やっぱり20時~23時が一番ツイートしている感じです。ただお昼時も結構(ry

どのタイプのツイートが一番多いかを集計したデータ
Retweetを積極的に行うお義父さんなのでRetweetが一番多いです。
仕事に関係するツイートは一番少ないです。リプライより少ないです。

f:id:garicchi:20150222004930p:plain

学習アルゴリズム

このデータだけでも十分おもしろいですが、せっかくのAzure MLなので機械学習をさせていつ仕事するかどうかを予測してみましょう。

今回用いる機械学習アルゴリズムニューラルネットワークです。
ニューラルネットワークとは脳の神経回路を模範した機械学習アルゴリズムの一つです。
Deep Learningといえば聞いたことがあるかもしれませんがいわゆるそれの一つです。

重み係数だとか、発火だとかシグモイド関数だとかバックプロパゲーションだと非線形識別可能だとか中間層だとかいろいろありますが詳しいことはニューラルネットワークでググってください。

ゼロから始めるDeepLearning_その1_ニューラルネットとは - 分からんこと多すぎ

今回はざっくり言うと曜日と時間から、どのタイプのツイートをする確率がどれだけあるのかを学習します。

Azure MLにはMulticlass Neural Networkというモジュールがあるのでこれを使いましょう。 f:id:garicchi:20150222010158p:plain

学習

では実際に学習をさせてみました。 f:id:garicchi:20150222011044p:plain

StartTimeとEndTimeを見てみると、ものの10秒ぐらいで学習が終わりました。
Azureのクラウドコンピューティングによるハイパフォーマンスとみるべきなのか、サンプルデータが少なかったからというべきなのか

予測

学習器が完成したのですべての曜日、時間を入力して仕事する確率を予測してみましょう。

こんなかんじですべての曜日と時間を書き込んだcsvを別途用意、アップロードします。
TypeはダミーなのですべてRetweetにしました。

f:id:garicchi:20150222011733p:plain

こうしてアップロードしたCSVを学習器に入力します。入力した結果はConvert CSVモジュールを使ってCSVに変換→ダウンロードします。

f:id:garicchi:20150222011924p:plain

予測結果

時間ごとに仕事してる確率を各曜日ごとにグラフ化しました。

月曜日

f:id:garicchi:20150222013734p:plain

火曜日

f:id:garicchi:20150222013747p:plain

水曜日

f:id:garicchi:20150222013758p:plain

木曜日

f:id:garicchi:20150222013814p:plain

金曜日

f:id:garicchi:20150222013825p:plain

土曜日

f:id:garicchi:20150222013838p:plain

日曜日

f:id:garicchi:20150222013849p:plain

月~水に関しては夜中に向かうにつれてかなり仕事(に関するツイート)をがんばっておられる感じです。
木金は週の後半でつかれたのかよるになると仕事する確率が減っている傾向にあります。

土曜日に関しては夜遅くまで仕事(に関するツイート)を積極的に行ってます。

日曜日は早めに切りあげてますね。

各曜日ごとの仕事してる確率の平均値の比較がこんなかんじです。

f:id:garicchi:20150222014308p:plain

土日に仕事(に関するツイート)の積極性が感じられます。
やはり金曜日はお疲れのようで全体的に仕事(に関するツイート)の量が少ない傾向にあると予想されました。

考察

お義父さんは土日に多くの仕事をするであろうとかんがえられる

おわりに

みなさんもうお気づきかと思いますがネタ記事です。
Azure MLについて解説する気も、機械学習について解説する気も全くなかったので説明も評価もグダグダです。   機械学習専門にしてる人たちに怒られそうな感じです。

ただ、この実験、半日で終わりました。プログラムもデータ収集のやつしか書いてません。
それだけでニューラルネットワークを使うことができ、人のツイートデータの傾向から予測値を算出することができました。

機械学習は今まで研究機関か頭の良いひとが使うツールでしたがAzure MLの登場によってかなり敷居を下げてくれてる感じがします。

みんながAzure MLを使って、クラウドコンピューティングによる機械学習を行い、本人が知らない間に人のツイートを分析、行動予測ができる世界がすぐそこまで来ています。(というかもう使える)

Azure MLは機械学習の大衆化を実現することができ、機械学習をより多くの人が簡単につかうことでNHKのNext worldで描かれているような、人間の意思決定がコンピュータによって行われる世界が実現するかもしれませんね(小並