アクションマイニングを⽤いた
最適アクションの導出
2013年10⽉12⽇
第34回Tokyo.R
@sfchaos
⾃⼰紹介

� TwitterID:@sfchaos
� お仕事:⾦融⼯学→データマイニング
� Rを使わなくても良い勉強会があると聞き,
⾶んできました!
1
1. イントロダクション

2
真夏⽇ですが,
秋ですね!
3
出典:http://markezine.jp/article/detail/18435

2013年秋
今をときめく
データサイエンティストたち
出典:佐藤洋⾏他,データサイエンティスト養成読本,
   Software Design Plus, 技術評論社, 2013年.

4
データサイエンティストに憧れて・・・
機械学習を使って予測精度を上げれば
業務に使ってもらえる

5
そんな⾵に思っていた時期が
ありました

6
ところが,世の中はそんなには
⽢くない(場合がある)らしい
頑張って 予測精度を 上げたのに
業務に合わず 使ってもらえず
わずかでも 精度を上げて 胸張るが
売上コスト 説明できず
予測力

端から見れば テストの点
数点アップも 劣等生
7
予測に限らずパターン発⾒でも
得られた知⾒をアクションに
結びつけることが重要

8
例えば退会者の分析
(churn analysis)

「誰が退会するか」だけではなく,
「どうすれば退会を阻⽌できるか」が
実務的には重要
9
そんなある⽇⾒つけた
アクションマイニングという
キーワード

10
というわけで,
今⽇はアクションマイニングの
サワリについてお話します

11
2. アクションマイニング

12
アクションマイニングとは,
アクション可能な知識発⾒の⼀分野
(Actionable Knoledge Discovery, AKD)

13
従来の予測・パターン発⾒
従来の予測・パターン発⾒では,
説明変数を原因,
結果変数を結果として考える.
説明変数

結果変数

14
決定⽊
サービス
レベル

Low

High

Middle

性別
⼥性

0.2

Low

男性

0.9

レート

0.1

0.9

High

0.2

顧客の満⾜度
15
アソシエーション分析
以下が起きているときに,チーズを無料にすれば
ワインを購⼊する⼈は増えるか?
� 多くの消費者がパンを購⼊する
� あまり多くの消費者はチーズを購⼊しない

パンとチーズを
購⼊

ワインを
購⼊する

16
アクションマイニング
結果変数を⽬標値にするために,
説明変数をどのように変えればよいか

説明変数
現状の状態
変更後の
状態

結果変数
何を
どのように
変えれば
よいか?

現状値

⽬標値
17
3. 因果ネットワーク

18
因果ネットワークとは,
変数の間の(因果)関係をあらわした
⾮循環有向グラフ
(asyclic directed graph)
19
季節

スプリン
クラー

⾬

湿り

滑り
やすさ
20
必要なパッケージのインストール
� Rgraphvizパッケージ
> source("http://bioconductor.org/biocLite.R")
> biocLite("Rgraphviz")

� bnlearnパッケージ
> install.packages("bnlearn")

21
Alarmデータセット
� 患者の診断項⽬とアラームのデータセット
> library(bnlearn)
> alarm[1:2, ]
CVP
PCWP HIST
TPR
BP
CO HRBP HREK HRSA
PAP
SAO2
FIO2
1 NORMAL NORMAL FALSE
LOW NORMAL HIGH HIGH HIGH HIGH NORMAL NORMAL
LOW
2 NORMAL NORMAL FALSE NORMAL
LOW LOW HIGH HIGH HIGH NORMAL
LOW NORMAL
PRSS ECO2 MINV
MVS
HYP
LVF
APL ANES
PMB
INT KINK DISC
1
HIGH ZERO HIGH NORMAL FALSE FALSE FALSE FALSE FALSE NORMAL FALSE TRUE
2
HIGH ZERO ZERO NORMAL FALSE FALSE FALSE FALSE FALSE NORMAL FALSE FALSE
LVV
STKV CCHL ERLO
HR ERCA
SHNT
PVS
ACO2 VALV VLNG VTUB
1 NORMAL NORMAL HIGH FALSE HIGH FALSE NORMAL NORMAL NORMAL HIGH LOW ZERO
2 NORMAL
LOW HIGH FALSE HIGH FALSE NORMAL
LOW
LOW ZERO ZERO LOW
VMCH
1 NORMAL
2 NORMAL

22
Alarmデータセット
� 診断項⽬(変数)間の関係を可視化
> library(bnlearn)
> res = empty.graph(names(alarm))
> modelstring(res) <paste("[HIST|LVF][CVP|LVV][PCWP|LVV][HYP][LVV|HYP:LVF]",
+
"[LVF][STKV|HYP:LVF][ERLO][HRBP|ERLO:HR][HREK|ERCA:HR][ERCA]",
+
"[HRSA|ERCA:HR][ANES][APL][TPR|APL][ECO2|ACO2:VLNG][KINK]",
+
"[MINV|INT:VLNG][FIO2][PVS|FIO2:VALV][SAO2|PVS:SHNT][PAP|PMB][PMB]",
+
"[SHNT|INT:PMB][INT][PRSS|INT:KINK:VTUB][DISC][MVS][VMCH|MVS]",
+
"[VTUB|DISC:VMCH][VLNG|INT:KINK:VTUB][VALV|INT:VLNG][ACO2|VALV]",
+
"[CCHL|ACO2:ANES:SAO2:TPR][HR|CCHL][CO|HR:STKV][BP|CO:TPR]",
sep = "")
> graphviz.plot(res)

23
MVS

DISC

PMB

INT

PA P

V MCH

KINK

VLNG

SHNT

VTUB

PRSS

複雑な,あまりに複雑な
FIO2

APL

MINV

VALV

PVS

TPR

A NES

ACO2

SAO2

ECO2

HY P

LVF

CCHL

LVV

STKV

HIST

ERLO

HR

ERCA

PCWP

CV P

CO

HRBP

HRSA

HREK

BP

Blood Pressure

24
4. 因果ネットワークを⽤いた
アクションマイニング

25
今回は次の論⽂で提案された
⼿法を紹介
P.Shamsinejadbabak, M.Sarace, and
H.Blockeel, Causality-based costeffective action mining, 2013.
26
CREAMアルゴリズム

27
滑りやすさを

説明変数(要因)の状態を
変えたときに,
結果変数が⽬標値になる
条件付確率を算出し,
期待効果を推定

Step.1
因果ネットワークが与えられた前提で,
以下の値を外製的に設定
§ スプリンクラーをOffからOnに変えるコスト
§ 滑りやすさが変更されたときに得られる利益

季節

Step.3
スプリンクラーをOffからOnにしたときに,
⽬標とする滑りやすさが実現する
条件付確率を算出

スプリン
クラー

⾬

湿り

滑り
やすさ

Step.2
⽬標とする滑りやすさを設定

Step.4
Step.1で設定した利益とStep.3で求めた条件
付確率から,利益upの期待値を算出
Step.5
スプリンクラーをOffからOnにする期待効果 =
Step.4で算出した利益upの期待値 Step.1で設定したコスト
28
こんな感じでアクションが出てくる
� 業務では,このような分析結果をもとに,変数を変えるため
の施策を考える活⽤イメージ(?)
アク ショ ン

ID
001

結果

効果
(=利益 - コスト)

CVP=HIGH =>
NORMAL

BP=HIGH ⇒
NORMAL

300,000円

002

・・・

(⾎圧が「⾼」から
「正常」に)
・・・

・・・

・・・

・・・

・・・

・・・

29
Rでの実装
cream.main <- function(target="BP", n=173328)
{
# CREAM
CREAMアルゴリズムを実⾏する関数
# @param target: target attribute(character)
# @param n: number of record of observational data
library(bnlearn)
(
)
# 観測データ(アラームデータセット)
data(alarm)
# CREAM
CREAMアルゴリズムの実⾏
cost <- 1.0
profit <- 1.0
cn <- hc(alarm)
cream(alarm, target, "NORMAL", cost, profit, cn)

プログラムは
後⽇公開予定

}

30
Rでの実装
cream <- function(x, target, target.value, cost, profit, cn)
{
# The CREAM algorithm
# for learning cost-effective action sets from causal networks
#
#
#
#
#
#
#

@param x: object data(data frame or matrix)
@param target: target attribute(character)
@param target.value: target value
@param cost: cost data(numeric)
@param profit: profit(numeric)
@param cn: underlying causal network
@return

library(foreach)
library(doSNOW)

プログラムは
後⽇公開予定

var.list <- colnames(x)
to.str <- paste0("(", target, "=='", target.value, "')")
result <- vector("list", nrow(x))
fitted <- bn.fit(cn, x)
...
 ...
}

31
CREAMをさらに進化させて
因果ネットワークも内部で推定する
ICE-CREAM(アイスクリーム)
という⼿法もある

32
5. まとめ

33
� アクションマイニングは,⽬的とする状態にするた
めに,どのような要因を変化させると効果的かに
ついて⽰唆.

� ぶっちゃけ,当初の⽬的からすると,ややスケー
ルダウンな感じも・・・

� が,うまく使えば「何をどう変えれば収益をupさ
せられるか」が分かるかも!?
34
そんなこんなで,
気がついたら
Rを使ってしまっていた・・・

35
やはり便利ですね,Rは!

36
参考⽂献
⽂献名

著者

出版社等

Incorporating
Hendrik Blockeel COSTS
causal reasoning
workshop @
ICDM 2012
in cost-effective

コメ ント
下記の論⽂を要訳し
たスライドであり,分
かりやすい.

action mining
Causality-based
Cost-effective
Action Mining

Action Rules
Mining

Pirooz
Shamsinejadbab
aki, Mohamad
Saraee, and
Hendrik 
Agnieszka
Dardzinska

因果ネットワークを⽤
いたCREAM, ICECREAMという2つのア
クションマイニングのア
ルゴリズムを提唱.
Springer

未読.この分野を専
⾨的に扱った本.
37

アクションマイニングを用いた最適なアクションの導出