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

普通の回帰ではなく、階層ベイズを使う利点 [確率・統計、データマイニング]

階層ベイズで変数が多くなると、計算時間が多くなってしまうので、
なんとか変数選択できないか?と考えました。

例えば、
1. まず、最初に、通常の回帰を行い、有意でないパラメータをみつける
2. 有意な変数のみ、階層ベイズの変数として使用する
というのは、どうかと思いました。

自分の先生に確認したところ、
『階層ベイズは、個人ごとのパラメータを推定できるのが利点。
 つまり、普通の回帰(平均的にみれば)では、有意でないかもしれないけど、
 ごく少数の人には有効な変数を発見できる。

とのことでした。

なるほど、、、

階層ベイズで、個人の異質性を表現することができますが、それは、普通の回帰分析では有意な変数でもある人にとって見れば有意でないし、
また、その逆で、有意でない変数もある人にとって見れば、すごく効いてくる変数かもしれない。

個人ごとのβのパラメータのヒストグラムです。
図1:βの平均値は、-0.224

図1は、きれいな正規分布に近い形をしています。
よく見ると、個人ごとに幅はあり、プラスの効果になっている人もいれば、マイナスの効果になっている人もいます。

図2:βの平均値は、0.008

図2は、明らかに二つのタイプの人がいることが分かります。
プラスに効く人とマイナスに効く人。

そして、平均値は、ちょうど二つの谷の0.008となっています。
通常の回帰分析では、このβの効果は、0.008と判断してしまうところですが、
実際は、0.008という平均の値を持っている人は、ほとんどいなくて、
よりマイナスか、よりプラスかのどちらか極端の値を持っている人だけとなります。

nice!(6)  コメント(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) 
共通テーマ:学問

階層ベイズ2項ロジットモデルの推定 [確率・統計、データマイニング]

階層ベイズ2項ロジットモデルの推定をする際に、よく使われるのが R のパッケージの "bayesm" でしょうか。
rhierBinLogit / rhierMnlRwMixture という関数を使います。

ただ、細かい設定をしたい場合は、尤度関数を書く必要があります。

## 2項ロジットモデルの対数尤度関数の定義
loglike <- function(y, X, beta) {
u <- X %*% beta
p <- exp(u)/(1 + exp(u))
ll <- y * log(p) + (1 - y) * log(1 - p)
sum(ll)
}


尤度関数はこうなります。

尤度関数を自由に扱うことができれば、ここから Nested Logit に拡張したり、いろいろな分析をすることができるのですが、少しプログラムをいじると、急に動かなくなるのが難しいところ。。。

その場合は、原理原則に戻って、丁寧にプログラムを作っていく必要がありますね。。。

なかなか動かないプログラムが、上手く動くようになった瞬間が、一番目の醍醐味ですね。
二番目の醍醐味は、シミュレーションした結果から、何かマーケティング的に面白い知見を得られた瞬間。

苦労が多ければ多いほど、成功したときに喜びは大きい。

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

bayesmのcheeseを使ったモデリング、その4~階層ベイズを使った線形回帰モデル [確率・統計、データマイニング]

Rの bayesm というパッケージに入っている cheese というデータを使って、いろいろ分析していきたいと思います。

1. 通常の線形回帰モデル
  http://skellington.blog.so-net.ne.jp/2017-11-07
2. RETAILER をフラグ化した線形回帰モデル
  http://skellington.blog.so-net.ne.jp/2017-11-08
3. 機械学習のアプローチ ← 今回
  http://skellington.blog.so-net.ne.jp/2017-11-09
4. 階層ベイズを使った線形回帰モデル
  http://skellington.blog.so-net.ne.jp/2017-11-10

目的変数:VOLUME(販売数量)
観測モデルの説明変数:DISP(陳列の有無), log_PRICE(販売価格のlog), 切片
階層モデル:切片のみ

RETAILERごとに説明変数のβ(係数)を求めることができます。

本当は、RETAILERに関する情報(土地情報, 店舗数)などを追加で用意できると、それらの特徴ごとに、βの傾向を把握することができます。
例えば、地方都市だと、陳列の有無が重要であるとか。

今回の cheese にはそのような情報が含まれていないので、切片のみのモデルとなっています。

【推定結果と実際の値の散布図】


続きを読む


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

bayesmのcheeseを使ったモデリング、その3~機械学習のアプローチ [確率・統計、データマイニング]

Rの bayesm というパッケージに入っている cheese というデータを使って、いろいろ分析していきたいと思います。

1. 通常の線形回帰モデル
  http://skellington.blog.so-net.ne.jp/2017-11-07
2. RETAILER をフラグ化した線形回帰モデル
  http://skellington.blog.so-net.ne.jp/2017-11-08
3. 機械学習のアプローチ ← 今回
  http://skellington.blog.so-net.ne.jp/2017-11-09
4. 階層ベイズを使った線形回帰モデル

作成したモデルは、ニューラルネットワーク、決定木(CHAID)です。

通常の線形回帰モデル:0.098
フラグ化した線形回帰モデル:0.705
ニューラルネットワーク:0.816
決定木(CHAID):0.705

フラグ化した線形回帰モデルと決定木の精度が、ほぼ同等となりました。
ニューラルネットワークの精度が、頭一つ抜けていいますね。

決定木がどのように予測をしたか分析してみると、
第一階層は、RETAILERごとにざっくりと分類します。
第二階層以下は、DISPとlog_PRICEで切っていきます。

DISPは、{0, 1}のデータなので、問題ないのですが、
log_PRICEは、連続値のデータが入っています。

そのため、決定木でざっくりと切ってしまうと、その区切りの予測値は全部同じ値になってしまうため、細かい予測値を出すことができません。

このあたりが、ニューラルネットワークより精度が劣る一つの原因になっていると思われます。

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

bayesmのcheeseを使ったモデリング、その2~RETAILERをフラグ化した線形回帰モデル [確率・統計、データマイニング]

Rの bayesm というパッケージに入っている cheese というデータを使って、いろいろ分析していきたいと思います。

1. 通常の線形回帰モデル
  http://skellington.blog.so-net.ne.jp/2017-11-07
2. RETAILER をフラグ化した線形回帰モデル ← 今回
3. 機械学習のアプローチ
4. 階層ベイズを使った線形回帰モデル

通常の線形回帰モデルでは、個々のRETAILERの特性を上手く吸収できずに、いまいちな結果に終わりました。

「個々のRETAILERごとに反応が変わるならば、RETAILERフラグを作ってはどうだろうか?」
ということでRETAILERをフラグ化してみます。

g

【推定結果と実際の値の散布図】


【推定結果と実際の値のピアソンの積率相関係数】
0.705
(通常の回帰モデルの場合は、0.098)

ということで、大幅に精度が上がりました。

RETAILERでフラグ化を行うということは、
説明変数
・切片 → RETAILERごとに異なる
・DISP → 共通の値
・log_PRICE → 共通の値
となっています。

階層ベイズを使った線形回帰モデルでは、切片だけでなくDISPやlog_PRICEもRETAILERごとに異質性を計算することができます。

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

bayesmのcheeseを使ったモデリング、その1~通常の線形回帰モデル [確率・統計、データマイニング]

Rの bayesm というパッケージに入っている cheese というデータを使って、いろいろ分析していきたいと思います。

write.table(cheese, "cheese.txt", sep="\t", quote=F, col.names=T, row.names=F, append=F)

いったん、ローカルにテキストファイルとして吐き出して、いろいろなモデルを作っていきます。
モデルは、SPSS Modelerを使用。

cheese のデータ概要ですが、全部で5,555レコード。
IDとなる、RETAILER数は、88社で、RETAILERをIDとすると、同じRETAILERのデータが複数存在します。
階層ベイズを使って線形回帰モデルを行っていくのですが、同じRETAILERでデータが、だいたい60レコード存在します。


5,555レコードあるのですが、
モデル作成用:5,359レコード
モデル検証用:176レコード
にランダムに分けます。

モデル検証用として、RETAILER 88社から2レコードずつ、合計176レコード取っておきます。

まずは、階層ベイズを使わないで、普通に線形回帰をしたらどうなるか?

目的変数:VOLUME
説明変数:DISP, log_PRICE

もともとのデータは、PRICEが入っているのですが、ここではlog変換を行ってlog_PRICEを説明変数としています。

分析結果は、こんな感じ。


DSIP, log_PRICE ともに有意となっています。
DISP(陳列)した方が売れますし、PRICE(価格)が高くなると売れなくなります。

納得の結果ですね。

ただ、R2は、0.088とそれほど高くありません。
推定結果と実際の値を比較してみても、上手く予想できていないことがよくわかります。

【推定結果と実際の値の散布図】


【推定結果と実際の値のピアソンの積率相関係数】
0.098

ということで、ここから工夫をしていくわけですが、
1. 通常の線形回帰モデル ← 今、ココ
2. RETAILER をフラグ化した線形回帰モデル
3. 機械学習のアプローチ
4. 階層ベイズを使った線形回帰モデル
とモデリングしていきます。

nice!(7)  コメント(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) 
共通テーマ:学問
前の30件 | - 確率・統計、データマイニング ブログトップ