2014年06月22日

KDD 2014に申し込み

KDD 2014に申し込みをしました。

KDD 2014 8月24日〜8月27日
http://www.kdd.org/kdd2014/

今年の開催地はニューヨークで、会場は Sheraton New York Times Square Hotel になります。

最初、ホテルの金額が高かったので、予算の都合上、会場とは別のホテルに宿泊予定でした…
旅行会社から送られてきたホテルを見ると、それはもうかなり微妙すぎるホテルだったのですが、KDD 2014に申し込んだ人限定で、格安に取ることができました。

ちなみに、航空会社は、日系のJALでした。
サービス面の質を考えると、JALかANAが安心です♪

2014年06月10日

ファイルに誤ったデータ型があります。

IBM SPSS Modeler(旧称クレメンタイン)でバッチ処理を行っている時に、
"ファイルに誤ったデータ型があります。"
というエラーメッセージが出ました。

色々試して分かったことをまとめると

・ローカルモードだと発生しない
・サーバに接続してのバッチモードも発生しない
・サーバにストリームを置いて、バッチ実行すると発生する

・Modelerのバージョンによって、発生したり、しなかったり。

・カラムを作る際に、型指定(名義型)すると発生。
⇒ "デフォルト"の型に変更すると発生しなかった。

かなり細かい条件で発生したり、発生しなかったりのバグっぽい。

2014年05月20日

KDD cup 2014 が始まる。

KDD Cup 2014 - Predicting Excitement at DonorsChoose.org
https://www.kaggle.com/c/kdd-cup-2014-predicting-excitement-at-donors-choose

ようやく内容が出てきましたね。

今回は寄付の支援がテーマとなっています。

締め切りは、7月8日、7月15日となっており、比較的ゆとりがあります。

どこまで分析に時間が割けるかわかりませんが、楽しみながら分析していきたいものです。

2014年04月25日

IBM SPSS Modeler 16、ログファイルの設定

IBM SPSS Modeler 16(旧称クレメンタイン)をインストールしました。

いつもの options.cfg の設定をいじっていたら、
log_directory, ""
がない!

調べていたら、バージョン16から新しいログエンジンを使っているとか。

How to set the log directory for IBM SPSS Modeler 16.
http://www-01.ibm.com/support/docview.wss?uid=swg21660846

では、今まで通りにするにはどうすれば良いのか?

まず、下記フォルダに移動します。
{Modeler 16 がインストールされているフォルダ}\SPSS\Modeler\16.0\config\

設定をいじるのは、下記の二つのファイル
・log4cxx.properties
・log4j.properties

仮に D:\Clem\ 配下にログを書き込む場合
・log4cxx.propertiesの設定
log4j.appender.LoggingAppender.File=${ALLUSERSPROFILE}/IBM/SPSS/Modeler/16/log/server_logging.log
⇒ D:/Clem/server_logging.log

・log4j.propertiesの設定
log4j.appender.LoggingAppender.File=${ALLUSERSPROFILE}/IBM/SPSS/Modeler/16/log/client_logging.log
⇒ D:/Clem/client_logging.log

と書きかえれば動くはずです。

ちなみに、デフォルトのログの場所は、Windows 7の場合は、
C:\Documents and Settings\All Users\IBM\SPSS\Modeler\16\log\
に置かれているかと思います。

設定をいじった後は、不要なログファイルは削除しておきましょう。

2014年04月03日

ストリームとセッションパラメータの設定

IBM SPSS Modeler(旧称Clementine)で最近知った素敵な機能があります。



ストリームパラメータとセッションパラメータの二種類あるのですが、基本的には同じ使い方ができます。

スクリプトを利用して、

# パラメータの設定
set 条件抽出_A.condition="index >= '$P-パラメータ'"

条件抽出ノードを中身を変えることもできますが、ストリームパラメータやセッションパラメータを利用すると、GUIを利用して、プログラムが苦手な人もお手軽に値を修正することができます。

ストリームパラメータの設定方法
ツール> ストリームのプロパティ> パラメータ

セッションパラメータの設定方法
ツール> セッションパラメータの設定



【プロンプト?】にチェックを入れておくと、ストリームを実行する際にパラメータを入力する画面が出てきます。



また、データ型に値を設定することで、パラメータ値の上限と下限を入力することもが出来ます。



変な値を入力すれば、エラーメッセージを出すことが可能です。



ただ、エラーメッセージだけなので、[OK]ボタンを押すと、範囲外のパラメータでも実行することができてしまいますが。。。

このパラメータをうまく埋め込んでしまえば、SPSS Modeler(クレメンタイン)初心者でも対話型で集計/分析することが可能になりますね。

2014年03月27日

データ解析コンペ 2014 成果報告会

今年は、データが二つ提供されたのと、課題編、フリー編と2種類のエントリーがあり、さらに、学生と一般(社会人)と別れていたので、相当な発表時間がありました。

朝から夕方まで、かなりの長丁場でした。

参考にできる分析は、自分で取り込み、使えるようにしたいものです。

2014年03月10日

NYSOL「にそる」

粒子化技術が拓くマイニングの新しい未来@国立情報学研究所に行ってきました。
講演は、約4時間半とけっこうなボリュームでした。

その中で紹介された大規模データの解析に関するソフトウェア。

「にそる」
http://www.nysol.jp/

大学やプロジェクトでの研究成果をソフトウェアとして提供しているみたいです。

こういうのは、ありがたいです。

2014年03月04日

データ解析コンペ、課題編の結果発表

今日は、課題編の報告会があります。
発表用の資料を作成していて、作ったモデルを見直していたのですが、大きなミスに気が付きました。

重要な特徴量が入っていない…!

作ったものの、選択ミスで入れ忘れていたようです。
影響が少ないどうでも良い変数だったら、良かったのですが、けっこう重要な変数なので、ほぼ絶望的。。。

結果は、県外となりました。

今回は、大小大きなミスをしていたな、、、って反省です。

忙しくバタバタしながらの分析だったといえば、それまでなのですが、
時間がない中でも、良いスコアを出すのが自分のポリシーなので、素直に反省です。

また、今年もありますし、KDD CUPの方ももうすぐはじまります。

この悔しさを次にぶつけていきたいと思います…(;_;)

2014年02月22日

データ解析コンペのスコア提出

無事、データ解析コンペのスコアを提出しました。
ここ1週間は、ほとんど寝ていない状態&寝ていても頭の中で常に考えている状態でした。

なんか吐血しそうな気もしましたが、無事に終わって何よりです。

こういうのって、実際に手を動かしてみて分かることって多い気がします。
時間という大きな制約の中で、どう最大限の利得を得るために、何をすべきか。
そして、何をしないべきか。

この何をしないべきか、って視点がすごく重要だった気がします。

Aの部分ってまともに計算したら1日かかるけど、95%の精度で良かったら1時間で終わる。
まず、それを見積もることが大切ですし、全体の中で何を取捨選択していくのかを、分析の都度変わっていく状況の中でどう決断していくのか。

分析しているときは、常に緊張した状態が続いていましたが、終わってみれば、晴れやかな気分です。

また、次回も機会があれば出てみたいものです。

2014年02月21日

協調フィルタリングを使わない理由

今日は、データ解析コンペのデータ提出日。
ここ数日は、通常の業務&データ解析コンペってことで、ほとんど寝れていない。
夢の中にも数式が出てくるレベル。。。w

今回、ECサイトで、誰がどの商品を買うのか、といった精度を競う。

と聞くと、おそらく多くのチームが協調フィルタリングとか使ってくるんだと思いますが、今回は、あえて協調フィルタリングは使いませんでした。

理由は2つあって、
1. 分析対象のECサイトですが、商品の入れ替わりが激しい。
→ 行列が安定しない。

2. リコメンドシステムを作るのではなく、誰がどの商品を買うのかを推定するモデルを作る。

協調フィルタリングで、それっぽい商品を見つけ、推薦し、その反応を競う競技ではないです。

一昨年のゴルフダイジェストオンラインの時もそうでしたが、
・有効そうな特徴量をできるだけ多く探す
・アルゴリズムを数多く試す
・スコアの補正ロジック
をバランスよく時間をかける。

そして、繰り返し、スコアをチェックしていくので、
・オーバーフィットしない構造を作る
・数多くのテストを簡単にできる仕組みを作る

これらを駆使すると、それなりの良い結果に仕上がってきた気がします。

結果の発表は、3月の上旬になりますが、楽しみです。

2014年02月20日

ビッグデータの使い方&江戸路

朝野先生出版お披露目会に行ってきました。


ビッグデータの使い方・活かし方―マーケティングにおける活用事例

ビッグデータの使い方・活かし方―マーケティングにおける活用事例

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 東京図書
  • 発売日: 2014/01
  • メディア: 単行本



その後の懇親会は、「江戸路」という焼き鳥のお店。
http://www.edoji.com/

朝野先生のサインも貰うことが出来ました♪♪♪



テーブルに座った時、みんな分野が異なり、初めてお会いする人ばかりでした。

しかし、話を進めていくうちに、何かしらどこかでつながっており、知人の知人くらいで結ぶことができ、改めて狭い世界だなって思います。

2014年02月18日

冬季インターンの最終発表会

昨日は、学生の冬季インターンの最終発表会がありました。

通常、分析って一人ですることが多い中、初めて知り合った人たちで、何か一つのテーマを分析する。
しかも、期間が2週間と短い。

そんな中で、しっかりとしたアウトプットを仕上げてくる学生ってすごいパワーを持っているな、と感じました。

分析自体も、粗削りな部分はありますが、それぞれ良い長所をいくつも持っており、個々の長所をどうまとめて、チームとしてのアウトプットにつなげていくのか。

とても良い経験になったのでは、と思います。

自分自身が参加したくなる、そんなインターンシップだったと思います。

2014年02月14日

ビデオリサーチのサンプル世帯が600人で良い理由

朝野煕彦先生の『ビッグデータの使い方・活かし方―マーケティングにおける活用事例』を読んでいる。


ビッグデータの使い方・活かし方―マーケティングにおける活用事例

ビッグデータの使い方・活かし方―マーケティングにおける活用事例

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 東京図書
  • 発売日: 2014/01
  • メディア: 単行本



本の中に書かれていましたが、首都圏における視聴率のサンプル世帯って600世帯らしい。

意外と少ないと感じたのだが、統計的にはそれくらいの対象者でも大丈夫って判断なのでしょう。

まず、視聴率の誤差を考えます。

視聴率の誤差が一番大きい時は、視聴率が50%の時。
逆に、誤差が0%に近づく、あるいは、100%に近づく時は、誤差が小さくなっていきます。

感覚的には、黒か白か、はっきりしないちょうど50%の確率の時に、サンプル数が一番必要になるってことなんでしょう。

標本誤差の計算方法としては、

標本誤差 = ±√(世帯視聴率(100-世帯視聴率)/標本数)
です。

標本数が600の時、世帯視聴率に対しての標本誤差は、
5%: 1.8%
10%: 2.4%
20%: 3.3%
30%: 3.7%
40%: 4.0%
50%: 4.1%
となります。

視聴率の大半が、10%〜20%って考えると、視聴率の誤差は、2.4%〜3.3%程度ってことが言えますね。

ということは、先週から視聴率が1%〜2%上がったとか下がったって議論は、
「それって誤差の範囲内でしょう?」
とも言えますね。

2014年02月13日

全件でモデリングをした方が良いのか、サンプリングしてモデリングをした方が良いのか?

全件でモデリングをした方が良いのか、サンプリングしてモデリングをした方が良いのか?

「そりゃ、データがあるなら、全部使った方が、精度がよくなるんじゃないか?」と考えてしまいます。
昔は、そう思っていた時代がありました。w

しかし、最近では、サンプリングしてモデリングを進めた方が良いのでは?と思っています。

1 or 0 を予測するモデルを事例に、いくつかの切り口で考えてみたいと思います。

◆ その1 バランス調整
モデルによっては、1 と 0の比率がちょうど50%、50%の割合で出現する方が、1,0 を分類するにあたり、一番精度が出るモデルがあります。
インターネットなどのデータは、反応する人が少なく(1の割合が極端に少なく)、そのままでは高い精度を出すことができません。
だったら、出現率を調整した方が良いのでは?と。

ただし、これは全件データでも1を0と予測した場合の罰則のコストを高く設定することで、同様のことができます。

◆ その2 特徴量の作成
モデルの精度って、どのモデルを使うかによってのみ決まるわけではないです。
気の利いた特徴量(説明変数)を見つけるだけで、劇的に精度が上がります。

ということは、最初から、モデルを作成するために膨大な時間を費やすより、色々なモデルや特徴量を色々と試しながら、あたりをつけていく方が効率が良いでしょう。

最終段階において、全件データでモデルを流し直し、どれだけ精度が向上するのかを試すのはありかもしれません。

実際に、全件データを使った方が、若干精度が高くなる場合が多いような気がします。

ということで、最近は、ビッグデータを高速に処理できるデータベースが普及してきましたが、ハードに振り回されすぎないようにしたいものです。

2014年02月08日

大雪の中のデータ解析コンペ

朝から大雪で、電車が夜まで動くかどうかわかりませんが、データ解析コンペに行ってきました。
ECサイトの学生フリー編です。

場所は、慶応大学の矢上キャンパス。
日吉に着くと、激しく雪が横に降っていて、傘をさしていても痛い。
ドラクエに出てくる、凍てつく吹雪とはこのことか!って感じでした。

雪による交通傷害が予想されていたので、発表はスムーズに進んでいきました。

ECサイトのリコメンドを発表しているチームが多かったです。
個人的には、リコメンド関連なら、フリー編ではなく、課題編に出れば良かったのでは?と思う部分もありました。
また、協調フィルタリング関連の発表も多かったです。

アマゾンの影響なのか、ECサイトのリコメンド = 協調フィルタリングということなんでしょうかね。

協調フィルタリングって、そこまで良い精度が出せるとは思っていないのですが。。。
まぁ、わかりやすく、実装も簡単ってのはあるのでしょう。

2014年02月04日

IBM SPSS Modeler(旧称Clementine)でオフセット関数のプッシュバック

ずっと、オフセット関数を使う場合、SQLプッシュバックってできないものと思っていました。
が、ウィンドウ(window)関数を使うことで同様の処理が出来ることがわかりました。


LAG( 項目 ,[ 行数 ,デフォルト ] )



OVER( [ PRTITION BY 項目1,

             [項目2,・・] ]

     ORDER BY 項目1,

             [項目2,・・] )



という書き方です。

IBM SPSS Modelerだと、オフセット関数を使う場合、何かの変数でソートをします。
その後で
@OFFSET(FIELD, EXPR)
という書き方をします。

たとえば、IDでソートをして変数 hoge の1つ前を持ってくる場合、
@OFFSET(hoge, 1)
と書きます。

これをウィンドウ(window)関数で書いた場合、

select
  ID,
  hoge,
  lag( hoge, 2 )
  over( order by ID ) as pre
from テーブル名;

と書けば、データベース(Netezza)側で処理させるので、ずっと高速に処理をすることができます。

2014年01月15日

IBM SPSS Modelerでじゃんけんプログラム

プログラミング言語のPythonを勉強していて、じゃんけんプログラムなるものがありました。
あえて、IBM SPSS Modeler(旧称Clementine)でじゃんけんプログラムを作ったら、どうなるか?を考えてみました。

ストリームは、いたって簡単です。


"じゃんけん" というノードは、
oneof([1, 2, 3])

それをファイル出力して終了。

それでは、面白くないので、少し変わったやり方を紹介。


【script.txt】

var x

 

execute 'tablenode'

 

set x = value:tablenode.output at 1 2

 

exit ^x



実行するバッチファイルとして、

clemb.exe -stream じゃんけん.str -script script.txt -execute

echo "じゃんけん = %ERRORLEVEL%"



これを実行すると、DOSの画面に結果を返すことができます。

通常、exitコードは、SPSS Modeler(Clementine)が正常に終了したかどうかの戻り値を返すものですが、これを利用してじゃんけんの結果を返しています。

それをDOSのコマンド %ERRORLEVEL% で表示をしています。

注意として、exitの戻り値は整数なので、
oneof(["グー", "チョキ", "パー"])
といった文字列を戻り値として返すことはできません。

また、バッチのログに

すべてのアクションの実行に失敗しました。エラー コード: 3

といったエラーログが吐かれてしまいます。

2013年12月16日

「博多ほたる」(麻布十番店)

今日は、ここで忘年会でした。

「博多ほたる」(麻布十番店)
http://tabelog.com/tokyo/A1307/A130702/13133270/

http://www.hotpepper.jp/strJ001012128/

以前、とあるセミナーで昔の同僚の人と偶然に会いました。
そして、朝野煕彦先生との忘年会があると聞き、急きょ、参加をさせてもらうことに。



朝野先生といえば、自分自身、数多くの統計関連の本を読ませてもらっています。

せっかくなので、サインもらえば良かったですかね…(^^;

ちなみに、来年の1月くらいにビッグデータを元にした新しい本も出版されるとか。
こちらも楽しみです。

朝野煕彦先生の書籍は(↓)


入門 多変量解析の実際 第2版 (KS理工学専門書)

入門 多変量解析の実際 第2版 (KS理工学専門書)

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 講談社
  • 発売日: 2000/10/10
  • メディア: 単行本(ソフトカバー)




入門 共分散構造分析の実際 (KS理工学専門書)

入門 共分散構造分析の実際 (KS理工学専門書)

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 講談社
  • 発売日: 2005/12/20
  • メディア: 単行本(ソフトカバー)




最新マーケティング・サイエンスの基礎 (KS社会科学専門書)

最新マーケティング・サイエンスの基礎 (KS社会科学専門書)

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 講談社
  • 発売日: 2010/12/07
  • メディア: 単行本(ソフトカバー)




マーケティング・リサーチ工学 (シリーズ・マーケティング・エンジニアリング)

マーケティング・リサーチ工学 (シリーズ・マーケティング・エンジニアリング)

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2000/12
  • メディア: 単行本


2013年12月15日

「データ解析のための統計モデリング入門」8章 メトロポリス法

「データ解析のための統計モデリング入門」8章 MCMCとメトロポリス法について。


データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)

データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)

  • 作者: 久保 拓弥
  • 出版社/メーカー: 岩波書店
  • 発売日: 2012/05/19
  • メディア: 単行本



ふらふら試行錯誤からメトロポリス法へ
1. ある初期値からスタートする。(例:q = 0.30)
2. 0.01、あるいは、-0.01だけ変化させる。

3. 対数尤度が改善されれば、その値を採用し、そうでない場合は、元の値を採用する。

ふらふら試行錯誤の場合

3. ある一定の確率 r で、値が悪くても新しい値を採用する

ふらふら試行錯誤からメトロポリス法へ

r = L(q新)/L(q)

(例)
元 q = 0.30, -46.378
新 q_new = 0.290, -47.619

r = exp(-47.619 + 46.378) = 0.289

メトロポリス法

【r】というノードを作成しています。
min(1, exp(function_new_Sum - function_Sum))

同時に【rand】という乱数を発生させ、r の値と比較することで、
"ある一定の確率 r で、値が悪くても新しい値を採用する"
という状態を作ることができます。

シミュレーションの結果は、こちら。
メトロポリス法

2013年12月14日

「データ解析のための統計モデリング入門」8章 ふらふら試行錯誤

「データ解析のための統計モデリング入門」8章 MCMCとメトロポリス法について。


データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)

データ解析のための統計モデリング入門――一般化線形モデル・階層ベイズモデル・MCMC (確率と情報の科学)

  • 作者: 久保 拓弥
  • 出版社/メーカー: 岩波書店
  • 発売日: 2012/05/19
  • メディア: 単行本



まずは、対数尤度を計算するストリームを作る必要があります。

対数尤度の計算式は、

data * log(q) + (8 - data) * log(1 - q) + log(二項係数)

となるのですが、あらかじめ、二項係数を作っておく必要があります。

【二項係数】

# Rの場合は、choose(8, x)



if data = 0 then 1

elseif data = 1 then 8

elseif data = 2 then 28

elseif data = 3 then 56

elseif data = 4 then 70

elseif data = 5 then 56

elseif data = 6 then 28

elseif data = 7 then 8

elseif data = 8 then 1

else -1 endif



尤度を計算するノードとして、
function
data * log(q) + (8 - data) * log(1 - q) + log(二項係数)

function_new
data * log(q_new) + (8 - data) * log(1 - q_new) + log(二項係数)

各レコードの値を計算し、最後に集計をすれば、完成です。

完成したストリームはこちら。
ふらふら試行錯誤

スクリプトは、

var x

set x = 0.0

 

for I from 1 to 100

execute 'outputfile'

execute 'tablenode'

 

set x = value:tablenode.output at 1 1

 

set q.formula_expr = x

 

endfor



q = 0.30 とした場合、
-46.378
となります。

ふらふら試行錯誤のロジックとして、
1. ある初期値からスタートする。(例:q = 0.30)
2. 0.01、あるいは、-0.01だけ変化させる。
3. 対数尤度が改善されれば、その値を採用し、そうでない場合は、元の値を採用する。

これをストリームで書いて、後は、100回ほどループをさせれば、OK!

35回くらいで、最大値 0.46 に張り付いているのがわかります。
初期値を 0.30 にしても、0.60 にしても同じ結果になります。

ふらふら試行錯誤