2017/06/01

ぼくがSPSS Modeler + Pythonを愛する理由

今年の正月に、抱負として「発信!」と宣言しながらも、ブログの管理画面を開くことのできぬままはや半年が過ぎ去ろうとしています。優秀な仲間を集めるにはブログを書くのが一番だとわかりつつも、筆が重いのです。そして人材系の会社の方からの各種督促メールも溜まっていくのです。人材募集については次のエントリーで書きます。宣言!

そんな中、ちょっとおもしろいネタがあったので、特にオチはないけどリハビリがてら筆を執ってみた次第。どんな文体で書いてたかも忘れてしもうた。

時は2017年、世は「人工知能(AI)」「機械学習(マシンラーニング)」が栄華の極みを迎えております。ほんの少し前までは「データサイエンティスト」「ビッグデータ」だったわけでございますが、きぃわぁどはいつの世も盛者必衰の理をあらわしもうす。まぁキーワードは勝手にやってくれという感じで、言葉の定義を議論するのとか、本当に森友加計ですね。重要なのは、環境の劇的な進化です。
  1. 計算場所がローカルCSV→DB→DWH→クラウドDBに変わって、劇的に早い・安い・旨い、の世界に。
  2. ちまちま個別に教科書を読ませて(理解させて)学習させる時代から、ディープラーニングに代表されるような、問題集と回答集だけをぜんぶ読ませて学習させる手法が、現実的に動かせるようになってきたこと。
  3. いろんなデータが取得され、クラウド上のストレージに事実上無限に蓄積できるようになってきたこと。(1.とかぶる)
  4. ...もうやめておこう
そんな中、興味深い記事が上がりました。まずご一読ください。個人的には分析をする「やり方」が最も重要だと思ってまして、そこを丁寧に解説されています。キーワードじゃなくて。
R, Python, SAS, SPSSをヨーロッパのデータサイエンティストの視点で比べてみた
http://qiita.com/KanNishida/items/3308de6cdea98d89edc7
私は最近はPythonを触ってる時間がたぶん一番長いんですが、実はデータ分析はほとんどSPSS Modelerでやってます。注意したいのは、この記事で言う「SPSS」とは「SPSS Statistics」(以後、Stats)のことであって、私が使っているのは「SPSS Modeler」(以後、Modeler)。Statsの方は分析始めた頃使ってたんだけどExcelのオバケのようなもので、Modelerはデータ分析のキャンバスのようなものなので、実はぜんぜん違う。
今回は特にプログラミング言語にフォーカスした比較ですので、SAS Enterprise Miner または SPSS ModelerのようなUIは今回の比較リストからは外してます。
と前置きがあるのだけれど、分析ツールにとってUIというものが非常に重要というのが昔からの持論。なので、この記事ではまるっと抜けているUser Interfaceとしてどう分析環境を構築するのが良いかというのが今回のエントリーの本題(ということにした)。近年のModeler (+Modeler Server)はもはやUIだけであって、アルゴリズムや計算はほとんどDB側で行うことが想定されてる、と思う。いわば、ガワ。

今、うちの会社で落ち着いている形式はこんな感じ。
  1. Pythonでデータを取得、軽く整形
  2. ストレージ(Amazon S3)に格納
  3. DWH(Amazon Redshift)に転送
  4. SPSS ModelerのUIで分析の流れを作る
  5. SPSS Modelerを実行すると、自動生成されたSQLがRedshiftに投げられ、最小限のデータだけがローカルに転送される
  6. モデリング or スコアリング
  7. 出力された値を本番システムに渡す
イマドキなのは6, 7の部分はクラウド側でやると思うけど。ModelerからもPythonやコマンドを叩けるので、できるといえばできる。あと、最近はAmazon Kinesis, Lambdaとか使って1-3をストリーミングへ移行中。本題とずれてきたので簡潔に言えば、分析はR, Python, SAS, SPSS (Stats)という選択肢だけじゃなく、SPSS Modeler + Pythonは便利だよ!ということでした。

さて。ディープラーニング的な世界になっても、やはり変わらぬのは変数職人だと思うのです。老害と呼べばいいさ。こんなニュースもありました。
ソフトバンク、新卒採用にAIを活用 エントリーシートの評価を補助

このテーマは有効としか思えないですね。膨大な数の中の候補から、ある程度の候補に絞り込む、しかも効きそうな変数も明確。現時点では自由記述欄の評価だけみたいですが。

精度を上げるためには、全項目を突っ込むのは必須。ただ、たとえば自社の若手総合職従業員数千人の評価付きデータから大学>学部だけをAIと呼ぶものに突っ込んでも、スッカスカで効かないはずなので、その学部の偏差値データと突き合わせると効くようになるはずです。ただ、大学>学部名の自由記述と予備校から仕入れた偏差値データの大学>学部名のマスタは完全一致しないので、表記ゆれを解消したり、欠損を推測したりする必要がでてくる。個人的には、こうした手間を勝手にやってくれる「AI」の方がありがたい。データサイエンティストのアシスタントとでも言うべきか。「これは大学>学部データだから、この偏差値データと結合してくれ」と言わなくても勝手にやっておいてくれる、優秀なアシスタント。「理工学部情報工学科」と「工学部情報学科」を同じとみなしてくれるアシスタント。バラバラなフォーマットの履歴書をスキャンしたら、
{
  "univercity": {
    "name": "渋谷大学",
    "id": "123",
    "department": {
      "name": "情報学部",
      "dept_id": 3
    }
  }
}
というJSONを作ってくれるアシスタント。正規化とデータ種別自動判別と自動結合。あとは無限のコンピュータリソースに膨大な変数ごと投げちゃえば、きっと計算してくれる。

人工知能(AI)バブルが日に日に大きくなっているのだけれど、SFじゃないので、機械への教え方が変わったくらいの認識に留めておくほうが良いのではないかと思う今日このごろ。

以前はもう少し文章まともに書けた気がするのだけれど、今日のリハビリはこれまで。
さて、AWS Summitへでかけよう。