So-net無料ブログ作成
確率・統計、データマイニング ブログトップ
前の30件 | -

IBM Think 2018@ラスベガス [確率・統計、データマイニング]

毎年、10月の末に開催されているIBMのイベントですが、
今年は、名前も変わり3月に行われるようです。

3月19日~22日@ラスベガス
ちょうど銃の乱射事件があった、あのホテルが会場です。

IBM - Think 2018 - Japan
https://www.ibm.com/ibm/jp/ja/think2018.html

IBM Think 2018 | The first-of-its-kind business and technology event
https://www.ibm.com/events/think/

Train、Barenaked Ladies、The Chainsmokersといった有名なバンドのライブもあるようですが、洋楽はあまりわからないので、どれくらいすごい人たちなのか不明です。。。w

nice!(4)  コメント(0) 
共通テーマ:学問

統計モデルと赤池情報量規準 AIC 2 [確率・統計、データマイニング]

島谷先生の「統計モデルと赤池情報量規準 AIC 2」に行ってきました。

統計モデルと赤池情報量規準 AIC 2
http://www.ism.ac.jp/lectures/29j.html

初級編ということで、統計数理研究所の公開講座の中では比較的易しめの内容でした。
1日のほとんどをAICの説明に使われて、かなりAICの理解が進んだ気がします。

最後の方に少しBICやりました。

これまでは、AICとBICの違いってよく分からなかったのですが、理論の出生から全く別のものだったんですね。

来年には、渡辺先生の「ベイズ統計の理論・モデリング・評価について」があるみたいです。


ベイズ統計の理論と方法

ベイズ統計の理論と方法

  • 作者: 渡辺 澄夫
  • 出版社/メーカー: コロナ社
  • 発売日: 2012/03/01
  • メディア: 単行本



nice!(1)  コメント(0) 
共通テーマ:学問

SPSS Modeler、NetezzaとOracle Exadataの微妙な違い その3 [確率・統計、データマイニング]

どうも日付の計算でNetezzaとOracle Exadataで仕様がことなっており、
それが原因のエラーが発生しやすいです。

困るのが、一見、プッシュバックが効いていて上手く動いているように見えても、
データベースの内部で大量にメモリを確保してしまいエラーが起きたり、
出力される結果が想定外のものだったりします。

ユーザ側はちゃんと動いている認識なので、エラーが起こっていることが発見しにくいのが厄介ですね。

Netezzaは、同じIBMの製品なので、細かいバグのチェックなどはやっているのでしょうが、
Oracle Exadataに対しても、丁寧なバグチェックはして欲しいものです。

今回のバグですが、SPSSのストリーム内で条件抽出をしたところ、
そのレコードの抽出が微妙で、処理がすごく遅くなってしまいます。
データベース内のメモリもたくさん使ってしまいます。

そこで、SQLを書く一番最初の入力ノードに条件抽出を書いてしまうのが良いかと思われます。
速度は劇的に速くなりました。

今日から日付差が、7日以内のレコードを抽出したい場合は、このように書きます。

WHERE (TO_DATE(TO_CHAR(SYSDATE, 'YYYYMMDD'), 'YYYY-MM-DD') - TRUNC("フィールド1",'DD')) <= 7
今日の日付を SYSDATE 持ってきて、"フィールド1" との日付差が7日以内という処理になります。 ~その他のTipsはこちら~ SPSS Modeler、NetezzaとOracle Exadataの微妙な違い その1 http://skellington.blog.so-net.ne.jp/2017-11-27 SPSS Modeler、NetezzaとOracle Exadataの微妙な違い その2 http://skellington.blog.so-net.ne.jp/2017-11-28

nice!(2)  コメント(0) 
共通テーマ:日記・雑感

SPSS Modeler、NetezzaとOracle Exadataの微妙な違い その2 [確率・統計、データマイニング]

Oracle Exadata でフラグ型 NCHAR(1 CHAR)の場合、エラーで読み込めない場合がある。

対処法 1
ODBCの設定で、Enable N-CHAR Support にチェックを入れる

対処法 2
to_charaで変数変換を行ってから読み込みをする
(SPSS Modelerの入力ノードでSQLを書くイメージです)

楽なのは、対処法1ですかね。

ただ、サーバモードでデータを持ってくる際は、サーバ側のODBCの設定も同じにする必要がります。
つまり、サーバ側でもEnable N-CHAR Support にチェックを入れる必要があります。

nice!(5)  コメント(0) 
共通テーマ:学問

SPSS Modeler、NetezzaとOracle Exadataの微妙な違い その1 [確率・統計、データマイニング]

Netezzaの場合、日付が文字列の場合はエラーが起きますが、
Oracle Exadataの場合、処理が通ってしまいます。
(プッシュバックも通ります。)

しかし、データの型が文字列なので、想定される結果が得られない場合があります。

本来、日付を表すデータは日付型で入っているべきなのですが、
文字列で入っている場合もあり、、、
そのような場合は、いったん日付型に置換してからしないとダメですね。

このようなミスをなくすためにも、本来は、リーダブルな仕様であるべきですが・・・


リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

  • 作者: Dustin Boswell
  • 出版社/メーカー: オライリージャパン
  • 発売日: 2012/06/23
  • メディア: 単行本(ソフトカバー)



nice!(1)  コメント(0) 
共通テーマ:学問

日付差を計算させるSQL [確率・統計、データマイニング]

データベースが異なると、SQLの書き方も若干変わってきます。
データベースを変更する際、思った以上に移管コストがかかるので、注意が必要ですね。。。(涙

以下、備忘録

■ 日時データを日付データに置換するSQL
## Netezza(PureData)の場合
SELECT
  DATE(日時フィールド) AS "日付フィールド"
FROM データベース名

## Oracle Exadataの場合
SELECT
  TRUNC(日時フィールド, 'DD') AS "日付フィールド"
FROM データベース名

■ 日付差を計算させるSQL
## Netezza(PureData)の場合
SELECT
  DATE_1 - DATE_2 AS "日付差",
FROM データベース名

## Oracle Exadataの場合
SELECT
  TRUNC(DATE_1, 'DD') - TRUNC(DATE_2, 'DD') AS "日付差"
FROM データベース名

nice!(2)  コメント(0) 
共通テーマ:学問

SPSS Datathon 2017 特別講演 [確率・統計、データマイニング]

SPSS Datathon - 研究奨励賞復活!データサイエンティストへの道
http://spss-datathon.com


12月6日に開催されます。

こちらで講演するのですが、今回は、「時系列分析」について話そうかと思っています。

当日の観覧受付は、上記のサイトから申し込みできるようです。

nice!(6)  コメント(0) 
共通テーマ:学問

SPSS Modelerでファイル出力する際の注意点 [確率・統計、データマイニング]

最近、はまった初歩的なミスの事例。

ファイル出力する際に、文字コードのエンコードが指定できます。
デフォルトは、【ストリームのデフォルト】となっています。

実際、選べるのは、
1.【ストリームのデフォルト】
2.【システムのデフォルト】
3.【UTF-8】
が選べます。



普段、ローカルでストリームを作成し、本番サーバで実行する際に、
ローカルと本番サーバが同じOSならば、なんの問題もなく動いくのですが、

・出力フィールドに日本語名が入っている
・SPSS Modelerのバージョンが異なる
場合に、【ストリームのデフォルト】を選んでいると、
文字化けを起こしてしまい処理でエラーが発生することがあります。

まとめると、
・ローカルと本番サーバのSPSS Modelerのバージョンをそろえる
SPSS Modelerの新しいバージョンを使いたくなって、ついついローカルだけバージョンを上げてしまいがちですが、開発をする際は、同じバージョンで開発しないとだめですね。。。

・フィールド名に日本語を入れない
日本人なので、日本語のカラム名にしたくなりますが、英語のカラムが安心

・【ストリームのデフォルト】ではなく、【UTF-8】を選択しておく

nice!(1)  コメント(0) 
共通テーマ:学問

統計フォーラム 2017 [確率・統計、データマイニング]

統計フォーラム 2017
http://adv-analytics.com/statisticsday/

こちらで講演する機会がありました。

機械学習と統計モデルの事例を中心とした発表内容でしたが、
発表内容が多すぎたかなと、反省です。

講演に関して、質問などありましたら、お気軽にご連絡ください。

nice!(2)  コメント(0) 
共通テーマ:学問

実践 IBM SPSS Modeler 顧客価値を引き上げるアナリティクス [確率・統計、データマイニング]

SPSS Modelerの本が出ます!

実践 IBM SPSS Modeler 顧客価値を引き上げるアナリティクス
https://www.amazon.co.jp/dp/448902276X/


実践 IBM SPSS Modeler~顧客価値を引き上げるアナリティクス

実践 IBM SPSS Modeler~顧客価値を引き上げるアナリティクス

  • 作者: 西牧 洋一郎
  • 出版社/メーカー: 東京図書
  • 発売日: 2017/10/10
  • メディア: 単行本



半ページだけですが、記念にコメントを書かせてもらいました。

nice!(0)  コメント(0) 
共通テーマ:学問

lasso回帰 / リッジ回帰による多重共線性の回避 [確率・統計、データマイニング]

重回帰で回帰係数の符号が逆転している場合の意味
http://skellington.blog.so-net.ne.jp/2017-05-17

マルチコは悪か?
http://skellington.blog.so-net.ne.jp/2017-09-25

パラメータに非負制約を与えた重回帰分析
http://skellington.blog.so-net.ne.jp/2017-09-26


こちらのパラメータに非負制約を与える回帰分析は、Rのoptimを使う必要があるなど、ちょっとややこしいです。
一方、Rのパッケージを使ってお手軽にする別の方法を紹介しておきます。

多重共線性が起こっているということは、回帰分析で逆行列の計算が難しいという問題あります。
逆行列で0に近い数が分母に来るという問題です。

これを回避するのが、lasso回帰であったり、リッジ回帰であったりするわけですが、
lasso回帰の場合は、変数選択という意味が強く、不要と思われるである変数は落とされます。

リッジ回帰は、同じく「正則化」を行うわけですが、変数選択ということは行われません。

今回のデータ(前回のデータ)は、
 Y <- 1.0 - 0.1 * X1 + 0.5 * X2 + 1.0 * X3 + rand
という形式で発生させた疑似データを使っています。

まずは、lasso回帰を行った結果。
 Y = 1.026 + 0.300 * X2 + 0.922 * X3
という結果になりました。

X1の係数が小さいのlasso回帰を使うと、その係数は落とされてしまいます。



次に、リッジ回帰を行った結果。
 Y = 1.027 + 0.001 * X1 + 0.300 * X2 + 0.882 * X3
という家㏍が得られました。

X1の偏回帰係数は、小さい値ですが、リッジ回帰の場合はちゃんと残っていますね。

どっちの回帰を使うかは、それぞれ何を得たいかによって違ってきますが、
lasso回帰、リッジ回帰とも想定通りの結果が得られました。



nice!(4)  コメント(0) 
共通テーマ:学問

パラメータに非負制約を与えた重回帰分析 [確率・統計、データマイニング]

重回帰で回帰係数の符号が逆転している場合の意味
http://skellington.blog.so-net.ne.jp/2017-05-17

マルチコは悪か?
http://skellington.blog.so-net.ne.jp/2017-09-25


xとyの相関はプラスなのに、重回帰になると逆のマイナスになる場合の続き。

重回帰の偏回帰係数の意味をきちんと理解していると、
分析者本人は、符号が逆になっても問題ないと理解できるのですが、
上司に説明する際など、そのままでは誤解を生む場合があります。

重回帰の場合、マイナスだからといって、その効果がマイナスということを意味していません。
一方で、マイナスをなんとかプラスの係数にして、しかも、重回帰を行いたい!という気持ちもわかります。

もはや、普通の重回帰ではなく、重回帰の形をした別の分析ということになります。
しかも、出てくるアウトプットが重回帰の形をしているので、これまた、誤解を生みかねないので、あまりお勧めをしませんが、、、
自分ならこうやってプラスにするという方法を書いておきます。

重回帰分析の流れ
1. 最尤法(最小二乗法)を解く
ただし、普通のパッケージにおいては、回帰係数に制約条件を付けれないのでRの最適化関数optimを使って解きます。

2. 通常、パラメータの探索区間は -∞~∞ なので、exp(β)と変数変換することで、非負の制約を与えることができます。

気になる精度ですが、

# 普通の重回帰分析
モデル作成用:1.058
モデル検証用:1.002

# パラメータに非負制約を与えた重回帰分析
モデル作成用:1.090
モデル検証用:1.009

ということで、パラメータに非負制約を与えた重回帰分析の方が精度が落ちてしまいますね。
この辺りは、パラメータに制約与えて最適化を解いているので、自明と言えば自明ですが。。。


~以下、実際のコード~

# 普通の重回帰分析
fr <- function(x)
{
b1 <- x[1]
b2 <- x[2]
b3 <- x[3]
b4 <- x[4]

LL = 0
for(i in 1:hh) {
x_ols <- b1 * dat_b[i, 1] + b2 * dat_b[i, 2] + b3 * dat_b[i, 3] + b4
y_ols <- dat_b[i, 4]
LLL <- (y_ols - x_ols)^2
LL <- LL + LLL
}
return(LL)
}

res1 <- optim(b0, fr, method = "BFGS", hessian = TRUE, control = list(fnscale = 1))

# パラメータに非負制約を与えた重回帰分析
fr <- function(x)
{
b1 <- x[1]
b2 <- x[2]
b3 <- x[3]
b4 <- x[4]

LL = 0
for(i in 1:hh) {
x_ols <- exp(b1) * dat_b[i, 1] + exp(b2) * dat_b[i, 2] + exp(b3) * dat_b[i, 3] + b4
y_ols <- dat_b[i, 4]
LLL <- (y_ols - x_ols)^2
LL <- LL + LLL
}
return(LL)
}

# 対数尤度関数の最大化
res2 <- optim(b0, fr, method = "BFGS", hessian = TRUE, control = list(fnscale = 1))

nice!(7)  コメント(0) 
共通テーマ:学問

マルチコは悪か? [確率・統計、データマイニング]

xとyの相関はプラスなのに、重回帰になると逆のマイナスになる場合があります。

例えば、広告効果の場合、ある施策を行ったときに、基本はプラスになるはずだけど、
重回帰の偏回帰係数がマイナスになってしまうという例。

重回帰の原理原則を理解していると、「まぁ、そうだよね。」という場合が結構ありますが、マーケティングの立場からすると、その結果だとまずい場合があります。

ただ、本来なら、なぜマイナスになってしまうのかという理由はきちんと説明できるのですが、なかなかその原理を理解しないまま、悩んでしまう人は多そうですね。

昔、書いたブログのエントリー
 
重回帰で回帰係数の符号が逆転している場合の意味
http://skellington.blog.so-net.ne.jp/2017-05-17


話はそれましたが、マルチコ(多重共線性)が起こると何がまずくて、どうすれば良いのか?
逆に、まずくない部分は何か?をまとめました。

多重共線性が起こっている場合の現象
1. 係数の標準誤差が大きくなる
 各係数のt値が小さくなり、係数が優位になりにくくなる
 係数が理論から予想される値と大きくかい離することがある
2. 個別係数のt値が小さいにも関わらず、決定係数が大きくなる
3. データのわずから変動や観測期間の変更で係数が多く変化する

3.の現象は有名だと思いますが、1.と2.は意外と知らない人が多い気がします。

多重共線性の間違った対応
以下は、巷で流れている間違った対応なので、ご注意を!
1. 説明変数を減らす
2. X1, X2ではなく、変数変換でX1 - X2とX2を回帰する
3. 階差を取る
4. データ数を減らす

1.をやっている人が多い気がしますが、
本来必要な説明変数を減らすことは、過小定式化につながり、推定に偏りが生じてしまいます。

多重共線性の対処法
・データ数を増やす
・モデルについての追加的情報を使う
 β1+β2=1など

Y(目的変数)の推定精度
多重共線性が起こっていると、Yの推定値の精度が悪くなる気がするが、悪くなることはない。

nice!(1)  コメント(0) 
共通テーマ:学問

統計フォーラム2017 [確率・統計、データマイニング]

イベントの紹介です。

統計フォーラム2017
http://adv-analytics.com/statisticsday/

10月18日は、統計の日ということらしい。
大枠は決まっているんだけど、内容はこれから作っていきますw

nice!(8)  コメント(0) 
共通テーマ:学問

ネスティッドロジットモデル [確率・統計、データマイニング]

ネスティッドロジットモデル(Nested Logit)をoptimを使って解きました。
階層構造(入れ子)になっている選択を通常のロジットで解くとIIA問題があり、上手く推定できません。

対処方法としては、プロビットモデルで解くか、ネスティッドロジットモデル(Nested Logit)を使って解くかのアプローチになるわけですが、ネスティッドロジットモデルに対応しているパッケージなどが少なく、自分で尤度関数を作成して解くのが一番分かりやすそうです。
Rだとmlogitというパッケージがありますね。

【ポイント 1】
log sum で上がってくる部分のλは0≦λ≦1である必要があるため、
exp(bx) / (1 + exp(bx))
という形式で与えることで、0≦λ≦1を保証しています。

【ポイント 2】
optim 関数はデフォルトで最小化を行うため、control 引数に fnscale = -1 を代入して、最大化を行うようにする

【Nested LogitのRコード】
hh <- nrow(dat_ss) # レコード数
b0 <- c(0, 0, 0, 0, 0) # パラメータの初期化

# ロジットモデルの尤度関数
fr <- function(x)
{
b1 <- x[1] # 階層1の説明変数 1
b2 <- x[2] # 階層1の説明変数 2
b3 <- x[3] # 階層2の説明変数 1
b4 <- x[4] # 階層2の説明変数 2
bx <- x[7] # 0 <= bx <= 1

LL = 0
for(i in 1:hh) {
# 効用の計算
  U_K2 <- b3 * dat_ss[i,3] + b4*dat_ss[i,4]
U_K1 <- b1 * dat_ss[i,1] + b2*dat_ss[i,2] + (exp(bx)/(1+exp(bx)))*log(1+exp(U_K2))

# 選択確率の計算
PP1 <- exp(U_K1)/(exp(U_K1)+1)
PP2 <- exp(U_K2)/(exp(U_K2)+1)

# 対数尤度の計算
LLL <- dat_ss[i,5]*log(PP1)+(1-dat_ss[i,5])*log(1-PP1)+dat_ss[i,5]*(dat_ss[i,6]*log(PP2)+(1-dat_ss[i,6])*log(1-PP2))
LL <- LL + LLL
}
return(LL)
}

# 対数尤度関数の最大化
res_nl <- optim(b0, fr, method = "BFGS", hessian = TRUE, control = list(fnscale = -1))

nice!(44)  コメント(0)  トラックバック(0) 
共通テーマ:学問

Rを使って重回帰分析を色々な方法で解く その2 [確率・統計、データマイニング]

Rを使って重回帰分析を色々な方法で解く その1
http://skellington.blog.so-net.ne.jp/2017-05-30

こちらの続き。
汎用最適化関数 optim() を使って解く方法。

### optim を使ったパラメータ推定 ###
b0 <- c(0, 0, 0, 0) # 推定するパラメータの初期化
num_row <- nrow(dat) # レコード数

y_ols = dat$Sepal.Length
x_ols = cbind(1, dat$Sepal.Width, dat$Petal.Length, dat$Petal.Width)

ols <- function (y_ols, x_ols) {
min_rss <- function (param) {
sum((y_ols - x_ols %*% param)^2)
}
k <- ncol(x_ols)
return(optim(par = rep(0, k), fn = min_rss, method = "BFGS", hessian = TRUE))
}

result <- ols(y_ols, x_ols)

result
$par
[1] 2.3518922 0.6548347 0.2375590 0.2521268

$value # 対数尤度値
[1] 2.586648

$counts
function gradient
24 8

$convergence # 収束判定
[1] 0

$message
NULL

$hessian
[,1] [,2] [,3] [,4]
[1,] 100.0 342.80 146.20 24.60
[2,] 342.8 1189.20 502.32 85.24
[3,] 146.2 502.32 216.70 36.56
[4,] 24.6 85.24 36.56 7.14

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:学問

Rを使って重回帰分析を色々な方法で解く その1 [確率・統計、データマイニング]

まずは、パッケージ lm() を使って解く方法と行列を使って解く方法から。

# irisのデータを使用
head(iris)

# Species == "setosa" 50レコードを使用
dat <- subset(iris, Species == "setosa", c(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width ))

# 相関行列
round(cor(dat), 3)

Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length 1.000 0.743 0.267 0.278
Sepal.Width 0.743 1.000 0.178 0.233
Petal.Length 0.267 0.178 1.000 0.332
Petal.Width 0.278 0.233 0.332 1.000


### lm を使った重回帰式 ###
# Length = β1 * Width + β2 * Length + β3 *Width + β0
fit.lm <- lm(Sepal.Length ~ . , data = dat)
summary(fit.lm)

Call:
lm(formula = Sepal.Length ~ ., data = dat)

Residuals:
Min 1Q Median 3Q Max
-0.40662 -0.17721 0.01222 0.13388 0.49693

Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.35189 0.39287 5.986 3.03e-07 ***
Sepal.Width 0.65483 0.09245 7.083 6.83e-09 ***
Petal.Length 0.23756 0.20802 1.142 0.259
Petal.Width 0.25213 0.34686 0.727 0.471
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2371 on 46 degrees of freedom
Multiple R-squared: 0.5751, Adjusted R-squared: 0.5474
F-statistic: 20.76 on 3 and 46 DF, p-value: 1.192e-08


### 行列を使って解く方法 ###
solve(t(x_ols) %*% x_ols) %*% t(x_ols) %*% y_ols
[,1]
[1,] 2.3518898
[2,] 0.6548350
[3,] 0.2375602
[4,] 0.2521257

nice!(42)  コメント(0)  トラックバック(0) 
共通テーマ:学問

コンジョイント分析 [確率・統計、データマイニング]

8章 コンジョイント分析について


現代マーケティング・リサーチ -- 市場を読み解くデータ分析

現代マーケティング・リサーチ -- 市場を読み解くデータ分析

  • 作者: 照井 伸彦
  • 出版社/メーカー: 有斐閣
  • 発売日: 2013/11/22
  • メディア: 単行本(ソフトカバー)



よくやる間違い
属性水準(説明変数)として
・バッテリ時間
・保証期間
・色
・価格
を考えたときに、「価格」が入っているのは間違い

ダメな理由は、コンジョイント分析は、属性間の独立性を担保する必要があり、
価格は他の属性との相関があるため使えない。

nice!(48)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

重回帰で回帰係数の符号が逆転している場合の意味 [確率・統計、データマイニング]

個々の変数の相関が正(負)なのに、重回帰式において、その係数が負(正)になることがあります。

そんな時に、どう考えるか?

試しにネットに落ちている中古車データを拾ってきました。

20170517_img01.jpg

相関係数を計算すると

20170517_img02.jpg

となります。

走行距離や年数が古くなれば、中古車価格は下落するという事が分かります。

ここで、中古車価格を目的変数に、走行距離と年数を説明変数にすると
 中古車価格 = -10.0 × 走行距離 - 10.7 × 年数 + 252.0
という重回帰式が得られます。

走行距離が1万km増えると、中古車価格は10.0万円下落し、
同様に年数が1年増えると、中古車価格は10.7万円下落することが分かります。

さて、次に、年数を目的変数に、走行距離と中古車価格を説明変数にすると
 年数 = -0.0499 × 価格 - 0.154× 走行距離 + 13.86
という結果になりました。

年数と走行距離の相関係数は、0.562と正の値なのですが、
回帰式のパラメータは、マイナスとなっています。

つまり、「走行距離が1万キロ増えると、年数が0.154年減少する」となっていて感覚と値が違う結果になってしまいます。

これをどう考えるか?です。

重回帰の場合、解釈としては、注意が必要で、「他の変数が同じ値だった場合(他の変数を影響を統制した場合)の効果」をみていることになります。

つまり、「走行距離が同じであったとしたら、走行距離が1万キロ増えた場合、年数はどうなるか?」を表していることになります。

例として、ある車種が、
 【車種 A】走行距離:10万キロ、価格:100万円、年数:10年
だったとした場合、
 【車種 B】走行距離:20万キロ、価格:100万円、年数:???年
車種Bは、20万キロも走っているけど、車種Aと同じです。
つまり、年数が10年ではなく、もっと小さい数字であることが期待されます。

この構造を表しているのが重回帰のパラメータということになります。

一方、一般的には、走行距離が大きくなれば、年数も同時に大きくなる(正の相関がある)という事を表しているのが、相関係数となります。

nice!(38)  コメント(0)  トラックバック(0) 
共通テーマ:学問

KDD2017の申し込みが開始! [確率・統計、データマイニング]

KDD2017の申し込みが開始!
http://www.kdd.org/kdd2017/registration

今年はカナダのHalifaxです。

6/28までに申込すると、早期割引になりますね。
学割もかなりの額なので、学割で行くべきか悩みます。
(一応、大学院です。。。)

nice!(2)  コメント(0)  トラックバック(0) 
共通テーマ:学問

統計手法から統計モデリングへ その3 モデルの違いをパス図で理解 [確率・統計、データマイニング]

# パッケージの読み込み
library(lavaan)
 
# データの準備
lower <- '
1.000
0.774 1.000
0.383 0.496 1.000
'
full <- getCov(lower, names=c("Y", "X1", "X2"))




モデル 1
# モデル1
model_1 <- '
X1 ~ Y
X2 ~ X1
X2 ~ Y
X1 ~~ X1; X2 ~~ X2
'
 
fit_1 <- lavaan(model_1, sample.cov = full, sample.nobs = 20)
summary(fit_1, standardized=T)


ここで Y から X2のパス係数は有意でないので次の様なモデルを考える。



モデル 2
# モデル2
model_2 <- '
X1 ~ Y
X2 ~ X1
X1 ~~ X1; X2 ~~ X2
'
 
fit_2 <- lavaan(model_2, sample.cov = full, sample.nobs = 20)
summary(fit_2, standardized=T)






ここで面白いのが、モデル1とモデル2のYからX1へのパス係数の値は同じである。
そして、X1からX2のパス係数の値は、0.498から0.496に変化をしている。

これは、0.496 = 0.498 - 0.002ということだが、X2へのYの影響は、全てX1を経由しての「間接効果」を考えていることになる。

nice!(6)  コメント(0)  トラックバック(0) 
共通テーマ:学問

統計手法から統計モデリングへ その2 熱伝搬モデル [確率・統計、データマイニング]

y = a + b * x
という単回帰分析を考えた場合、パラメータa, bは分散共分散行列から計算することができます。



a = (yの平均) - σxy/σxx * (xの平均)
b = σxy/σxx

下記のような問題を考えた場合、
式1:y = a1 + b1 * x

式2:x = a2 + b2 * y
⇒ y = -a2/b2 + 1/b2 * x

回帰直線の変数xとyを入替えた場合の傾きは、一致しません。

つまり、因果の方向性を知っている場合に、
式1:(原因)= a + b * (結果)
式2:(結果)= a + b * (原因)

式2を考えた方が自然な発想になります。

ここで炉内温度、炉外温度の話に戻して、、、

炉内温度:Y [通常は、測定できない]
↓(熱伝搬)
炉外温度:X1 [測定可能]
↓(熱伝搬)
炉外温度:X2 [測定可能]

Yは炉内の真の温度で測定できない ⇒ 潜在変数
X1, X2は、観測変数となります。

因子分析や、パス解析、共分散構造分析を使ってモデリングをするのが次のステップとなります。

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:学問

統計手法から統計モデリングへ その1 因果推論のモデリング [確率・統計、データマイニング]

統計手法から統計モデリングへ
https://www.jstage.jst.go.jp/article/rssj1981/18/1/18_1_57/_pdf

椿先生がよく講義で使われる元ネタ

こちらを自分なりに色々試して理解しました。

考え方はこんな感じ。

炉内温度:Y [通常は、測定できない]
↓(熱伝搬)
炉外温度:X1 [測定可能]
↓(熱伝搬)
炉外温度:X2 [測定可能]



このようなデータがあった時に、Yの温度をX1とX2を使って、どう推定するか?という問題になります。

そこで、
Y = a1 * X1 + a2 * X2 + a0
という重回帰分析を使って、モデル化しようというのが最初の第一歩。

結果は、
Y = 1.214 * X1 - 0.001 * X2 + 10.8
となるのですが、X2の係数は有意でなく、再度
Y = a1 * X1 + a0
というモデルを考え、パラメータを推定します。

その結果は、
Y = 1.213 * X1 + 10.8
となります。

そこで、Yの予測結果(炉内温度)は、上の式で与えられると考えるのですが、このモデルのおかしいところは、X1やX2が決まれば、Yが決まるという構造を表していることです。

本来は、Yが決まってX1やX2が決まるので、原因と結果が逆転していることになります。

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:学問

IBM Watson Summit 2017 [確率・統計、データマイニング]

IBM Watson Summit 2017 に参加してきました。
実際に、自分でWatsonを呼び出すハンズオンセッションがあったりと、なかなか良かったです。

自分は、機械学習よりも統計モデル/ビジネス側の人間なので、そのあたりのセッションが減ってきているのは残念ではありますが、どちらか一方というよりかは使い分けな気がします。

片一方だけ知っていてはダメで、時間はかかるものの両方それなりに深いレベルまで理解しておくことが重要だと思っていましたし、今回のセッションを受けてやはりそうだなって思いました。

nice!(1)  コメント(0)  トラックバック(0) 
共通テーマ:学問

SPSS Modeler、シミュレーションノードを用いたモンテカルロ法の話 その2 [確率・統計、データマイニング]

SPSS Modeler、シミュレーションノードを用いたモンテカルロ法の話
http://skellington.blog.so-net.ne.jp/2017-04-21

前回は、正規分布を使ったシミュレーションでした。

今回は、ベータ分布を使ったシミュレーションの例になります。

ベータ分布は、ベルヌーイ分布や二項分布の事前分としての相性がとても良い分布です。
共役分布(きょうやくぶんぷ)と読みます。

3月の視聴率を30%と「点」で与えるのではなく、「30%付近に分布している」と分布で考えます。



シミュレーションノードを設定するとイメージが湧くかと思います。



例えば、形状1と2を1/10倍(サンプルサイズが1/10倍)にすると、分布は広がってきます。
つまり、30%よりも離れた値を取る割合が増えます。

形状の計算は、60人の30%ということで、18人、60人-18人=42人と計算します。
18+1=19
42+1=43



一方、形状1と2を10倍(サンプルサイズが10倍)にすると、分布の幅は狭くなります。

形状の計算は、6000人の30%ということで、1800人、6000人-1800人=4200人と計算します。
1800+1=1801
4200+1=4201



後は、「 theta_3 > theta_2 and theta_2 > theta_1 」となる確率を計算すれば、OKです。



朝野先生の教科書では、10万回シミュレーションされいて、0.57213という値でした。
SPSS Modelerを使ったシミュレーションでは、0.57299となり、非常に近い値を得ることができました。

nice!(4)  コメント(0)  トラックバック(0) 
共通テーマ:学問

SPSS Modeler、シミュレーションノードを用いたモンテカルロ法の話 [確率・統計、データマイニング]

朝野先生が書かれた『ベイズ統計学』をSPSS Modelerに実装しました。


ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2017/02/20
  • メディア: 単行本(ソフトカバー)



まずは、マルコフ連鎖モンテカルロ法ではない、普通のモンテカルロ法の話。

6章(6.1 モンテカルロ法より)
店舗A, B, C, Dの売上データあり、それを集計すると
 店舗A(平均100, 分散20)
 店舗B(平均120, 分散20)
 店舗C(平均110, 分散15)
 店舗D(平均100, 分散10)
となっていました。

なんとなく店舗Bの平均が高いのですが、1000日間の中で、店舗Bの売上が一番高い日はどれくらいあるでしょうか?といった問題をモンテカルロ法を使って計算します。

実際のストリームは、いたってシンプルです。



「シミュレーション生成」ノードの中身
分布で、正規分布を選んで平均と分散のパラメータを設定



売上なので、マイナスの値が出てくるとおかしいので、最小値を0.0としておきました。
実際は、平均100、分散10~20程度だと0以下になることは極めて稀なのですが、念のためです。w

相関のところは特に設定していませんが、こちらも設定することは可能です。
例えば、週末は売上が高くなるけど、平日は売上が落ちる、みたいな店舗の売上に相関があると仮定するならば、設定しても良いかもしれません。

拡張オプションでは、どれくらいの乱数を発生させるか、つまり、シミュレーションを行うか設定することができます。
デフォルトは10万。

「_max(フィールド作成)」ノードの中身
続いて、どの店舗の売上が最も高いかを計算しています。



@FIELD = max_n([Field_1, Field_2, Field_3, Field_4]


それぞれのフィールドで最大だったら1、それ以外は0という設定です。



「レコード集計とソート」ノードの中身
後は、各店舗別に1の数を合計しているだけなので、省略。

結果は、このようになります。



10万レコードあるので、各行のレコード数を10万で割ると、確率が出てきます。
教科書では、Bの店舗が最大になる確率は、54%となっていました。

今回、SPSS Modelerで実装した例では、54.75%ということで、ほぼ同じ結果となりました。

nice!(42)  コメント(0)  トラックバック(0) 
共通テーマ:学問

平成29年度統計数理研究所公開講座 [確率・統計、データマイニング]

平成29年度統計数理研究所公開講座が発表されました。

http://www.ism.ac.jp/lectures/kouza.html

B. ベイズ統計の理論・モデリング・評価について
D. 統計モデルと赤池情報量規準 AIC 1

気になっているのはこの2つ。

BもDも需要が高そうなので、抽選になりそうです。(^^;
抽選で当たると良いのですが。

nice!(4)  コメント(0)  トラックバック(0) 
共通テーマ:学問

All of Statistics: A Concise Course in Statistical Inference [確率・統計、データマイニング]

いくつか統計まわりの教科書を買いました。

All of Statistics: A Concise Course in Statistical Inference (Springer Texts
in Statistics)
https://www.amazon.co.jp/dp/0387402721/

All of Statistics: A Concise Course in Statistical Inference (Springer Texts in Statistics)

All of Statistics: A Concise Course in Statistical Inference (Springer Texts in Statistics)

  • 作者: Larry Wasserman
  • 出版社/メーカー: Springer
  • 発売日: 2004/10/21
  • メディア: ハードカバー




統計的学習の基礎 ―データマイニング・推論・予測―
https://www.amazon.co.jp/dp/432012362X/

統計的学習の基礎 ―データマイニング・推論・予測―

統計的学習の基礎 ―データマイニング・推論・予測―

  • 作者: Trevor Hastie
  • 出版社/メーカー: 共立出版
  • 発売日: 2014/06/25
  • メディア: 単行本




マーケティングの数理モデル (経営科学のニューフロンティア)
https://www.amazon.co.jp/dp/4254275161/

マーケティングの数理モデル (経営科学のニューフロンティア)

マーケティングの数理モデル (経営科学のニューフロンティア)

  • 作者:
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2001/06
  • メディア: 単行本




実践 ベイズモデリング -解析技法と認知モデル
https://www.amazon.co.jp/dp/4254122209/

実践 ベイズモデリング -解析技法と認知モデル-

実践 ベイズモデリング -解析技法と認知モデル-

  • 作者: 豊田 秀樹
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2017/01/25
  • メディア: 単行本(ソフトカバー)




岩波データサイエンス Vol.5
https://www.amazon.co.jp/dp/4000298550/

岩波データサイエンス Vol.5

岩波データサイエンス Vol.5

  • 作者:
  • 出版社/メーカー: 岩波書店
  • 発売日: 2017/02/16
  • メディア: 単行本(ソフトカバー)




ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―
https://www.amazon.co.jp/dp/4254122217/

ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

ビジネスマンがはじめて学ぶ ベイズ統計学 ―ExcelからRへステップアップ―

  • 作者: 朝野 煕彦
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2017/02/20
  • メディア: 単行本(ソフトカバー)



nice!(54)  コメント(0)  トラックバック(0) 
共通テーマ:学問

実践 ベイズモデリング [確率・統計、データマイニング]

豊田秀樹先生の新しい本が発売されていますね。

実践 ベイズモデリング -解析技法と認知モデル-2017/1/25


実践 ベイズモデリング -解析技法と認知モデル-

実践 ベイズモデリング -解析技法と認知モデル-

  • 作者: 豊田 秀樹
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2017/01/25
  • メディア: 単行本(ソフトカバー)



こちらの基礎からのベイズ統計学の続編かと思われます。


基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

  • 作者: 豊田 秀樹
  • 出版社/メーカー: 朝倉書店
  • 発売日: 2015/06/25
  • メディア: 単行本



基礎とありますが、途中は歯ごたえがあります。

ただ、原理をきちんと押さえることなく、ツールを使ってなんとなくそれっぽい解析をするのはとても危険なことなので、色々な本を読んで基礎を固めたうえで、実践をしていきたいものです。

nice!(50)  コメント(0)  トラックバック(0) 
共通テーマ:学問
前の30件 | - 確率・統計、データマイニング ブログトップ