2013年05月23日

IBM SPSS Modelerで一般化線形モデル(GLM):ポアソン回帰

GLMといえば、Rで分析していましたが、IBM SPSS Modeler(Clementine)でも同様のことができます。
本当に値って同じ結果が得られるのか?と検証しました。

結果は、RもModelerも同じ結果になっています。w

ポアソン回帰ですが、どういう場合に使うのか?
y <- x1 + x2
を考えた時に、yが上限のないカウントデータの場合にポアソン回帰を使います。

具体的な事例では、1年間にアクションする回数とかでしょうか。
たとえば、旅行サイトのアクション数を想定した場合、ある人は0回ですし、ある人は1回といったデータです。

Rで書く場合は、
 fit.all <- glm(y ~ x + f, data = d, family = poisson)
と書けばOKです。

リンク関数を正確に書くならば、
 fit.all <- glm( y ~ x + f, data = d, family = poisson(link = "log") )
と書きます。

Modelerの場合の設定は、わかりにくいですが、

と設定すれば、Rと同じ結果が得られます。

2013年04月24日

IBM SPSS Modelerのスーパーノード内にパラメータを渡す方法

久々に、IBM SPSS Modeler(旧Clementine)のネタ。

同僚からスーパーノード内のデータベースの設定ってどうするんですか?という質問があったので、作ってみた。

IBM SPSS Modeler Clementine クレメンタイン

まずは、スーパーノードなしの場合の書き方のおさらい。

set データベース.username = "********"

set データベース.password = "********"


 

execute 'テーブル1'



これをスーパーノード化した場合、どう書くのか?

set スーパーノード.parameters.'データベース.username' = "********"

set スーパーノード.parameters.'データベース.password' = "********"


 

execute 'テーブル2'



オブジェクト指向的に考えると簡単で、スーパーノード.parameters.と書けばスーパーノード内にパラメータとして値を渡すことができる。

実際に、スクリプトを実行してみると、

実行前
IBM SPSS Modeler Clementine クレメンタイン

実行後
IBM SPSS Modeler Clementine クレメンタイン

となっている。

パラメータとして、
データベース.username
データベース.password
がスーパーノード内に渡っていることが確認できる。

また、スーパーノードの外にデータベースという名前があり、スーパーノード内にもデータベースという名前がある。
通常、同じ名前のものがあると、スクリプトでエラーが発生するのだが、中と外ではきちんと分けて扱われるため、エラーは起きないようだ。

2013年04月22日

KDD Cup 2013

KDD Cup 2013 - Author-Paper Identification Challenge
https://www.kaggle.com/c/kdd-cup-2013-author-paper-identification-challenge

KDD Cup 2013 - Author Disambiguation
http://www.kaggle.com/c/kdd-cup-2013-author-disambiguation

データが遅れていましたが、KDD CUP 2013がようやく始まりました。

分析する期間が1か月半くらいしかありませんが、、、参加してみます。w

2013年04月18日

Analytics 2013 - SAS Forum Japan

Analytics 2013 - SAS Forum Japan に行ってきました。
http://www.sascom.jp/event/analytics2013

マッキンゼーのポール・マクナーニ氏の講演が面白かった。

なんでも、Amazon.comで出品されていた新品の本「The Making of a Fly」に2,300万ドル(約19億円)という価格が付けられたそうです。

「The Making of a Fly」で検索すると、この話がいっぱいヒットします。
http://www.michaeleisen.org/blog/?p=358

アマゾンでは他の出品者の価格をクロールして、自動で出品する価格を決定するアルゴリズムが利用できます。
通常は、他社よりも少しだけ低い価格に設定しますが、逆に、少しだけ高い価格にしても売れる場合もある。

この例では、
profnathはbordeebookの0.9983倍
bordeebookがprofnathの1.270589倍
となるように価格を設定したそうですが、これを繰り返していくと

0.9983×1.270589×0.9983×1.270589×・・・
どんどん値段が上がっていきます。

上限や下限を設定しておかないと、ただ同然の値段で売ったり、このような笑い話のような値段を設定したりしてしまいます。

2013年04月11日

Information On Demand Conference Japan 2013

Information On Demand Conference Japan 2013 に行ってきました。
http://www-06.ibm.com/software/jp/data/events/iodc2013/

なんかやけに多いなぁと思ったら、3000人も入ったそうです。
ビッグデータブームを象徴しているようです。

いくつか発表を聞きましたが、どの発表も得られるものがありました。

通常の業務の新しいアイデアにしたり、他社の分析者と話すことで、また1年間のやる気が出てきます。(爆

次は、秋にあるんでしょうかね?
次回も楽しみにしています。

2013年03月25日

2012年度、データ解析コンペの成果報告会

2012年度、データ解析コンペの成果報告会がありました。
最近の学生の活躍は本当にすばらしいものがあります。
社会人部門に出ても十分にやっていけるであろうチームもありました。

今年は、データを提供する側として1年を過ごしましたが、やはり見ているだけでは物足りなく、自分だったらこうしたいとか、なるほどそういう視点ですか、といった気持ちでした。

後は業務との兼ね合いですが、来年度のデータも面白そうなので、出て見ようかなと、考えています。

2013年03月13日

ABテストのコントロールグループ

最近、行ったフィジビリについてのお話。

ABテストを行う上で、Aグループ(通常グループ)とBグループ(新ロジックグループ)を分けました。

ここで、ちょっとした問題が。

AグループとBグループを抽出し、そのリストを提出しましたが、どうも効果の差が怪しい。

色々調べた結果、AグループとBグループでリストが提出された後、その中からさらに対象者の剪定が行われていたため、効果に別のバイアスがかかってしまっていました。

基本的なことですが、もろもろリストの剪定を行い、最後の最後でABのグループに分けることが大切です。
そうすることで、初めて効果が純粋に測定できます。

リストを提出した後に、剪定作業があるのか、ないのか、基本的なことですが、、、
きちんと確認しておかないと、変なバイアスがかかったまま、フィジビリの効果を測定するってことになりかねないので、注意が必要ですね。。。

2013年03月07日

データ解析コンペ、大阪の部会

データ解析コンペで大阪の予選に行ってきました。

OR学会と比べ、アプローチ方法がずいぶんと違い新鮮な気がしました。
学会(部会)の特徴なんでしょうね。

優勝して次に進まれたチームは、本戦でも頑張ってください。

2013年02月23日

2012年度 データ解析コンペ(OR学会の予選)

今日は、データ解析コンペOR学会の最終発表がありました。
課題編とフリー編の発表がありました。

課題編とフリー編で感じたことは、時間をかけて真摯にデータに向き合っているところは、やはり点数も高く、テキトーにやっているところは、点数も低かったのでは、と思いました。

学生にしろ、社会人にしろ、新たなことにチャレンジするためには、時間が取られる。
その時間を作るためには、何かを捨てて時間を作る必要があります。

捨てる覚悟、最後まで本気でやり切る思いが、最終的な差につながったのではと思います。

2012年12月18日

メールで one to one リコメンド

one to oneのレコメンド(例えばメルマガとか)を推進する上で、既に何らかの施策が行われている場合、
その効果ってどうなんだ?
と問われることが多いはず。

2つの場合に分けて考えてみたい。


1. 全員に送るのではなく、すでに何らかのロジックで抽出されている場合
こちらは、話は簡単で、ABテスト(フィジビリ)を行い、新しいロジックの方が優れていることを証明できれば良い。

例えば、化粧品などのレコメンドをする場合

A(既存):20代〜30代の女性に送っていた
B(新アルゴリズム): 男性でも興味がある人には送るし、女性でも興味がない人には送らない

シナリオとしては、下記2つが考えられる。
・A(既存)を同じ量のメールをBのグループに送り、アクション数や利益がAよりも高いことを証明する
・A(既存)を同じアクション数や利益を得るのに、Bの方が少ないメール(コスト)で同程度のアクション数や利益が得られることを証明する。


2. 全員に送ってしまっている場合
こちらは、少し面倒である。


A(既存)と同じ量のアクション数や利益を得るためには、Bも全員に送る必要があるからだ。
当然、全員に送っているので、効果の高い人もいれば、薄い人もいる。
薄い人は、ほとんどアクションしないのだが、送らなければ、絶対にアクションしないわけで、短期的な売り上げが減少するリスクがある。

となると、別の視点が必要になってくるのだが、某サイトとかだと、メルマガを登録すると、次の日から死ぬほどメールが送られてきたりするサイトもある。
送れば良いってものじゃなく、やはり適正なタイミングやメール数があるわけで、このあたりをきちんと考えていない輩も多い。。。

別の視点というのは、中長期の利益。
つまり、メールを送り過ぎることによる離反を加味し、中長期の利益を換算してみてはどうだろうか。


質 <------> 量

対象者を絞れば質が良くなり、対象者を広げれば量が増える。
Bのグループの対象者を変化させ、短期的な利益、離反者、長期的な利益の変化をシミュレーションすることで、リコメンドの落とし所がみえてくるのではと思う。

そもそも、長期的な視点を持たず、短期的な視点のみしか考慮しないのであれば、、、
結局は全員に送ることになり、意味がないのだが…。

2012年11月22日

数理システム ユーザーコンファレンス 2012

数理システム ユーザーコンファレンス 2012

「数理システム ユーザーコンファレンス 2012」に行ってきました。
http://www.msi.co.jp/userconf/

今週は、ステップ休暇が明けたということで、良い気分転換(?)になりました。
(´∀`)

2012年11月17日

平成24年度データ解析コンペティション 第1回研究部会

今日は、データ解析コンペティションの中間発表がありました。
フリー学生の部、フリー一般の部、課題の部と一日かけての発表会。

年々、学生のレベルが上がってきている気がしますが、今年も学生の部はキラリと光る発表が多かったです。

一般の部は、、、いつもスローな感じがしますが、今回もスロースタートなチームが多かったように思います。

さて、データ解析として、二つのステップがあると思います。
1. データや課題を理解する
2. 実際の施策(アクション)に落とし込む
です。

大学での研究ではなく、実際にビジネスの中でデータを解析するということは、2.の部分がとても大切なわけですが、例年の発表をみていると、1.で終わってしまっているチームが多いと感じます。

1.の部分にすごいパワーを使って、
「○○ということがわかった。」
としても、実際には、
「まぁ、そうだよね。」
となる場合が多い。

パワー配分としては、1.は、そこそこにしておいて、2.の具体的な施策部分に接続するための分析にパワーをかけた方が良いと感じています。

2012年10月18日

統計の日 2012

今日は統計の日でした。
IBM SPSSでセミナーがあったので、行ってきた。

なるほど、その通り!と思った部分を備忘録として。

・ 細分化とモデリング
→ 全体をまるっとモデリングするのではなく、決定木などで細分化した後、そのセグメントに対してモデリングを行う。

・ インサイトは大切。
→ ブラックボックスで精度重視も大切ですが、代地を考えると、なんでカスタマがそう行動するのかを把握していないとダメ。

・ ベイズ系のアプローチ
→ 階層ベイズや状態空間モデルは、最近の流行りでしょうか。

2012年10月05日

IBM SPSS Modeler 横と縦の変換

BAF2012で西牧さんの講演で
・横もちデータ(要約済み)を縦もちデータ(トランザクション)に復元
するというものがあった。

実際にIBM SPSS Modeler(旧Clementine)のストリームを作ってみた。


悪くはないのだが、一つ欠点がある。
横が長すぎる場合、結合の部分で爆発的にデータが増えることが問題である。

例えば、
10万レコード×1万フィールドだった場合、
10万×1万=10億レコードの超巨大ファイルになってしまう。
しかも、横のフィールド数自体も1万行あって巨大。

実際にストリームを実行してみると、翌朝、クレメンタインが落ちていた…
という悲しい結果が待っていた。

そこで、別途スクリプトを使いストリームを作ることにした。

<ストリームの思想>
一度に縦持ちにするのは、レコード数が爆発してしまうので、ファイルを1万回読みこみ、縦持ちにしてみようというスクリプトを書いた。

ストリーム自体はいたって簡単。


次に、スクリプトだが、下記のように書ける。
------------------------------------------------------------
set x0 = "\""

# in_fields_to でフィールドを一つ一つ読み込む
for f in_fields_to x1

# 処理しないフィールドは無視
if ^f = "MOLECULE" or ^f = "Act"
set D_.formula_expr = x0 >< ^f >< x0

# 縦持ちにしたい1万フィールドについて処理を行う
else
set x1.include.^f=true
set D_.formula_expr = x0 >< ^f >< x0
set x1.new_name.^f='num'

execute 'ACT15'
set x1.include.^f=false
endif
endfor
------------------------------------------------------------

大切なのは、キャッシュを最初に作っておくこと。
1万フィールドもあると、読み込みがスタートするだけで、時間がかかってしまう。
最初の1回目のループが実行されるとキャッシュが作成されるので、2回目以降のループがかなり高速になる。

2012年09月07日

BAF2012 手書きフォント

IBM SPSSのセミナーBAF2012がありました。

時系列予測+裏Tipsということでしたが、いかがでしたでしょうか。
いくつかフォントに関して質問があったので、書いておきます。

「手書きフォント」でググるとそれっぽいいろんなフォントが出てきます。
「ふい字 フォント」とか有名でしょうか。

一度、使ってみてくださいw

聞いている側と話す側では、ずいぶんと体力の消耗が違いますね…
圧倒的に話す方が疲れました。。。

明日は、ディズニーランドのハロウィーンなので、今日早く寝て、体力を回復せねば!

2012年09月05日

IBM SPSS Modelerで日本地図の描画

IBM SPSS Modeler(旧クレメンタイン)15.0の機能で地図の描画ができます。

といっても、最初に用意されているのは、世界地図とかアメリカの地図。
日本の地図は自分で用意する必要があります。

ということで、さっそくインストールしました。

手順として、
1. smzファイル形式で地図を用意する
2. 所定の場所に設置する
です。

まず、smzファイルということですが、
@. shp(Shapeファイル)形式の地図を用意する。
 適当にググって欲しいエリアのshpをダウンロードしてきます。
A. SPSS Modelerの[ツール] - [マップ変換ユーティリティ]を使い、shpをsmzに変換。
です。

次に、所定の場所なのですが、マニュアルを見ると、

Windows XPの場合、このフォルダはC:\Documents and Settings\\Application

Data\SPSSInc\Graphboard となります。フォルダは変更できません。


とあります。

Windows XPに15.0をインストールする人ってどれくらいいるんでしょうか。。。
最近だと、Windows 7も普及しているので、その場所は、

C:\Users\\AppData\Roaming\SPSSInc\Graphboard\maps\

になります。

後は、グラフボードで都道府県名と値を結びつければOKです。

[例]
都道府県名 レコード
北海道 118.677
青森県 -13.106
岩手県 -33.225
宮城県 116.257
秋田県 -35.182

こんな感じに描画されます。


2012年09月04日

IBM SPSS Modeler 15.0をインストール

IBM SPSS Modeler 15.0をインストール

IBM SPSS Modeler 15.0(旧:クレメンタイン)をインストールしました。
過去にもろもろ設定しているconfigを引き継ぎ、設定完了。

ちょうどこのタイミングでNetezzaの導入完了したので、Modeler+Netezzaを組み合わせての分析も楽しみです。

ちなみに、DBモデリングをみると、
[回帰]
・線形回帰
・一般化線形

[クラスタリング]
・K-Means
・対立クラスタリング(分裂クラスタリング?)

[決定木]
・ディシジョンツリー
・回帰ツリー

[ベイズ]
・Bayes Net
・Naive Bayes

[その他]
・PCA(主成分分析)
・時系列
・KNN
と用意されています。

なんとなく解るものから、なんだかよく解らないアルゴリズムまで色々ありますね。。。

個人的に、一番楽しみにしていたのは、GLMM。
今まで、Modelerでデータを加工して、RでGLMMを実行ということをしていたので、それが一つのツール上で完結するのは非常にありがたいです。

2012年08月02日

SASユーザ総会2012での発表

SASユーザ総会で事例紹介をしてきました。
http://www.event-office.info/sug12/

講演を聴きに来てくれたみなさま、ありがとうございました。
割と具体的に突っ込んだ内容を話せたのでは、と思っています。

しかし、さすがに発表すると、疲れますね。w
発表が終わったら、ど〜っと疲れが出てきました。

昨日も懇親会&2次会があって、2日連続。
さすがに、今日は、疲れていたので、烏龍茶で乾杯し、結局、グラス1杯しか飲みませんでした。

2012年08月01日

データ解析コンペ2012、発会式

今日は、データ解析コンペの発会式@豊洲NTTデータがあります。
http://www.recruit.jp/news_data/old/2012/07/20120705_12731/

数えてみたら、8年間出場していました。
そのうち、4年間(うち5回)は、OR学会で1位か2位を頂き、成果報告会に進むことができました。

業務や育児が忙しい中、割と頑張った方ではないかと思っています。w

昨年で、選手として出ることはいったん卒業しました。
(引退というわけでないです。)

いかに質の良いデータに触れるか、ということが分析者にとっての成長に繋がるので、
今年は、データを提供する側に回り、データ解析(データサイエンス)の発展に貢献できれば、と考えています。

8月からデータの提供が始まり、来年の2月〜3月くらいまで、割と長期間の分析になるかと思いますが、みんながどんな分析結果を出してくるのか、とても楽しみです。

2012年07月26日

IBM SPSS Modeler 15の新機能

IBM SPSS Modeler 15の新機能のセミナーがあったので、行ってきた。

今回、お!って思ったは、一般化線形混合モデル(GLMM)が搭載されたことだ。
今まで、IBM SPSS Modeler(旧 クレメンタイン)でデータを加工し、
データ量が小さくなったものをRに投げてGLMMを実行していた。

今後は、そこが同じプラットフォーム場で完結するってのはありがたい。

実際に使っていないので、こちらが想定するものがちゃんと入っているかが気になるところだが…w

※ 過去のGLMMに関するブログ記事
データ解析コンペ、発表資料完成!
http://skellington.blog.so-net.ne.jp/2009-03-25

一般線形混合モデル〜ポアソン回帰〜
http://skellington.blog.so-net.ne.jp/2009-11-05