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

2012年07月24日

IBM SPSS Modelerを使った需要予測と裏Tips

9月7日に講演をすることになりました。

IBM Business Analytics Forum Japan 2012 - Japan
http://www-06.ibm.com/software/jp/analytics/events/baforum2012/session.html

あえて、上級者向けにしてみましたが、実際は中級者〜上級者向けのコンテンツになりそうです。
IBM SPSS Modeler(旧:クレメンタイン)初心者は少し苦しい内容になるかもしれません。

裏Tipsってのは、前の講演の西牧さんのModeler Tipsをぱくったものです。
個人的には、こちらの講演がとても楽しみです。

2012年07月17日

リコメンドエンジンの設計思想

先日、フィジビリを行ったリコメンドのまとめ資料を作った。
社内向け資料なので、外部講演とかでは、まるまる話すことはないが…w

最近、安価なリコメンドASPが増え、導入すれば、なんとなく効果があるように見える。

しかし、こういうのって、なぜ、そのリコメンドをするのかという強い意志が必要だと思う。

もう少し解り易くいえば、「なんだかよく分からないけど、当たるんです。」というものは上っ面を叩いている気がして、それ以上の伸び代ってないと感じる。
逆に、カスタマが○○を購買する意思決定のモデルは、××だから、△△という思想の元、このリコメンドが大切なのだ、というリコメンドを作った方が精度も代地も大きいのは?と。

そこには、やはり仮説が必要で、それをもとにモデルを作り、きちんと検証をする。
そして、また、モデルを修正していく。
この地道なパターン、真摯に課題と向き合う姿勢が一番大切なんだと思う。

今回、フィジビリの振り返りのため、商材ごとにカスタマの動きを分析したが、やはり商材ごとに大きくことなり、だからこそ、ひとつのまるっとしたモデルではなく、モデルの中に強い意志を込めたモデルが必要なんだ、と確信した。

2012年07月05日

SASユーザ総会 2012

SASユーザ総会 2012
http://www.event-office.info/sug12/

期間:2012年8月1日(水)〜3日(金)

8月1日は、初級編。
8月2日は、マーケティング編。
8月3日は、スコアリング、金融リスク管理編。

8月2日のセッションで発表します。
今のところフラッシュマーケティングのサイトについての話を予定しています。

お時間のある方はご参加ください。

2012年07月04日

平成24年度データ解析コンペティション発会式の日程が発表

平成24年度データ解析コンペティション発会式の日程が発表となりました。

日時:平成24年8月1日(水)15:00〜

当日スケジュール
<第一部>
15:00〜15:20 開会挨拶・開催概要について
15:20〜16:00 ご講演(詳細は後日)
16:00〜17:00 提供データの説明および質疑応答

<第二部>
17:15〜19:00 意見交換会(場所:豊洲センタービル20階を予定)

今年のデータ提供元はリクルートで、ポンパレとスーモのデータになります。
去年と同じく一般部門と課題部門の予定です。

詳しくは、発会式の時に説明があるかと思います。

個人的には、どちらのデータを使っても面白い分析ができるのでは?と思います。

提供データの方は、あえて色々なデータを加えましたので、いろいろな分析が出来ると思いますが、一方で、樹海に迷い込みかねないので、そこは注意が必要ですね。

2012年07月03日

連続値を予測する場合の評価関数

今、5つのデータがあったと仮定して、値が高い順番になるように予測をする。
model_Aとmodel_Bの2つのモデルを作った場合、どちらの方が精度が良いか評価したい。


背景として、A〜Eをどの順位にすれば良いのか?ということを考えたい。
売上の期待値が高いものを上位の順位に持って来て、低いものを下位の順位に持ってくる。

その際、どういう評価関数を使えば、その順位のソートの良し悪しを評価できるのか?を考えた。

グラフに書いてみると、明らかにAの方がよさそうだ。


評価関数の特徴として、
1. 最良なモデル(神様モデル)は、1.0になるようにする。
2. 最低なモデルは、0.0になるようにする。
3. ランダムなモデルは、0.5になるようにする。

これらを加味すると、
  (モデルの面積 - 最低モデルの面積)
= ----------------------------------------
  (最良モデルの面積 - 最低モデルの面積)

上記の式だと、上手く評価関数を作れそうである。

上記の場合、
1. 最良モデル → 1.0
2. 最低モデル → 0.0
3. ランダムモデル → 0.5

最良曲線と最低曲線はランダム曲線を境に反転させたものなので、完全なランダムの場合の期待値は、0.5となっている。



実際に、model A と model B を比較すると、Aは75.0%の一致率、Bだと96.4%になります。

2012年06月29日

医療従事者のための分析 - cox回帰分析

医療従事者のための分析 - cox回帰分析


生存時間解析―SASによる生物統計

生存時間解析―SASによる生物統計

  • 作者: 大橋 靖雄
  • 出版社/メーカー: 東京大学出版会
  • 発売日: 1995/04
  • メディア: 単行本



以下、備忘録として。

--------------------------------------------------
4. cox回帰分析
比例ハザード性が成立することが前提

ログマイナスログは、比例ハザード性の確認で使う

ヘビサイト関数

傾向スコア
Propensity Score
交絡因子の調整
-> ロジスティック回帰
--------------------------------------------------

2012年06月28日

医療従事者のための分析 - Kaplan-Meier法

医療従事者のための分析 - Kaplan-Meier法






以下、備忘録として。

--------------------------------------------------
3. Kaplan-Meier法
Kaplan-Meier:単変量
Cox回帰:多変量

打ち切りデータを使用できる

ストラータがない場合 -> 上のラジオボタン
ストラータがある場合 -> 下のラジオボタン

2つの場合 -> 左のラジオボタン
3つ以上の場合 -> 右のラジオボタン

Log Rank: wi = 1
Breslow: wi = n
Tarone-Ware: wi = √n

平均値:正規分布
中央値:真ん中の人

Bonferroni
P < 0.05 ?
P < 0.05 * 1/3 ?
--------------------------------------------------

2012年06月27日

医療従事者のための分析 - ロジスティック回帰

医療従事者のための分析 - ロジスティック回帰

以下、備忘録として。

--------------------------------------------------
2. ロジスティック回帰
二項、タ項、累積(順序)

判別分析 -> 正規性を過程
ロジスティック -> 制限がない

検証
@ 分割法(学習用、テスト用)
ホールドアウトサンプル
A 交差検証法
B ブートストラップ法

| r | ≧ 0.9
VIF ≧ 10

Nagelkerke 疑似R2乗
低めに出ることが多い

HosmerとLemeshowの2つの潜在的な問題
・期待度数が5以上必要
・サンプルサイズが大きくなると帰無仮説を棄却しやすい
500を超えると棄却されやすい

ROC
感度
1 - 特異度
AUC

変数減少法
複数の変数の効果が残りやすい

変数選択:条件付きは使わないほうが良い
条件付きロジスティック回帰とは異なる

ブートストラップ
--------------------------------------------------

2012年06月26日

医療従事者のための分析 - クロス集計表の検定と連関度

IBM SPSSのセミナー『医療従事者のための分析』を受けてきました。

別に医療関係の仕事をするわけでもなく、転職を考えているわけではないのですが、、、
そこで使われている統計手法がマーケティングに使えそうかなって思い受けました。

なかなか良い感じの情報が収集できたと思っています。

以下、備忘録として。
--------------------------------------------------
1. クロス集計表の検定と連関度
行に要因
列に目的
行に%を持って来て、要因ごとの%を出す

Pearsonのカイ二乗
・0セルが5未満
・最小期待度数23.10
→ Fisherの正確確率

両方出ている場合は、Fisherを選択する

2つの検定結果が異なる場合
尤度比検定

0.50 → 未満で判定するので有意でない

Mantel-Haenszel(マンテル・ヘンツェル)
交絡因子
編相関係数
単純オッズ比 ⇔ 調整オッズ比

ファイ(Phi)
0-1のデータの場合は、ピアソンの相関係数と完全に一致する

カッパ係数
0.4を超えたほうが良い
--------------------------------------------------

2012年06月18日

【IBM SPSS Modeler】スーパーノードにする利点

IBM SPSS Modeler(旧クレメンタイン)にスーパーノードというのがあります。
いくつか、スーパーノードにする利点がありますが、変わった使い方を紹介。

今、variable_x に対して、
objective_variable = 123 * variable_x + 456
という計算をしています。





なんらかの理由で直接変更できない場合、
(フラグ設定や再構成ノードなど)
裏技的な変更方法あります。

【方法 その1】
1. str → zip
2. 修正
3. zip → str

参考記事:IBM SPSS Modeler(旧Clementine)を圧縮してみる
http://skellington.blog.so-net.ne.jp/2010-11-02

【方法 その2】
基本、Clementineってストリームにしろ、モデルにしろ、スーパーノードにしろ、zipです。

ストリーム → .str
モデル(ニューラルネットなど) → .nod
スーパーノード → .slb

つまり、いったん、スーパーノード化してあげれば、xmlを直接いじることができます。



スーパーノードを解凍して、xmlをみると、先ほどの式が書かれています。


式を変更します。


xmlを保存し、zip圧縮します。
そして、.zip → .slb としてストリームに戻すと、


きちんと、反映されていました。

2012年05月29日

スーパーノード内の設定を変更するスクリプトの記述方法

IBM SPSS Modeler(旧 Clementine)をスクリプトで動かす時のデータベースのIDとパスワードの設定方法

データベースノードの名前: HOGE
スーパーノードの名前: S_NODE

1. スーパーノードを使わない場合
set HOGE.username = "ログイン名"
set HOGE.password = "パスワード"

2. データベースの接続ノードがスーパーノードの中にある場合
set S_NODE.parameters.'HOGEusername' = "ログイン名"
set S_NODE.parameters.'HOGE.password' = "パスワード"

スーパーノード内にある場合、オブジェクトっぽい感じで書きます。

2012年05月24日

多変量解析:比例ハザード分析

IBM SPSS「医療統計:多変量解析」講座の続き。

過去のブログ
・多変量解析:重回帰分析
http://skellington.blog.so-net.ne.jp/2012-05-18

・多変量解析:多重ロジスティック回帰分析
http://skellington.blog.so-net.ne.jp/2012-05-21


以下、講座の備忘録。

--------------------------------------------------

・比例ハザード分析
David Cox, British statistician, 化学者
まだ生きている

coxの比例ハザード分析とも呼ぶ

比例ハザード分析の事例
1974年 Prentice, R.L.

多重ロジスティック回帰:予測のための手法
比例ハザード分析:影響要因を見つける手法
- 予測ための手法ではない
- スコアの算出はできない(様々な意見がある)

いつの日か全員発生する(死亡する)ことを想定して計算されている

2群の差の検定
ログランク検定が一般的
最近では、他の検定手法もあるらしい

Df Betaの分析
必ずしも行う必要はない

ログマイナスログ
カテゴリーごとにハザード比が一定しているか?

--------------------------------------------------