RでTURF分析

RでTURF分析
今回は、RでTURF(Total Unduplicated Reach and Frequency)分析を行おうと思います。

RでのTURF分析

RにはTURF分析をするためのパッケージturfRがあります。これを使って、実際にTURF分析をしてみましょう。

先ずはパッケージのインストールをします。

In [1]:
install.packages('turfR')
The downloaded binary packages are in
	/var/folders/xt/y8w7bvdn66nc_zw1ys_gqkv80000gn/T//RtmpruW89X/downloaded_packages

先ずはサンプルのデータを確認してみます。

In [2]:
library(turfR)
data(turf_ex_data)
head(turf_ex_data)
Loading required package: dplyr

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union

respid wgt item_1 item_2 item_3 item_4 item_5 item_6 item_7 item_8 item_9 item_10
54 0.9521319 0 0 0 0 0 0 1 0 1 1
86 1.6156584 0 0 1 1 0 0 1 1 1 1
142 1.1078316 0 1 0 0 0 1 1 0 1 1
155 1.8704826 0 1 1 0 0 0 1 1 1 1
168 0.2586296 0 0 1 0 1 1 1 1 1 1
254 0.3738731 0 0 0 0 0 1 1 1 1 1

turf分析のデータセットは1列目にID、2列目にウェイトを入れるのが必須条件のようです。特にウェイト考慮しない場合は、全てに1にしておきます。では、このデータを購買履歴データと仮定してturf分析をしてみます。ウェイトは購買金額による優良顧客の度合いとしておきましょう。

In [3]:
ex1 <- turf(turf_ex_data, 10, 3:6)
3 of 10: 0.1149869 sec
4 of 10: 0.1675189 sec
5 of 10: 0.1280491 sec
6 of 10: 0.109576 sec
total time elapsed: 0.534277 sec 

10個のアイテムの中から、それぞれ3、4,5、6個の組み合わせの場合のリーチを計算しました。計算結果はリストの形で返されます。取り敢えず、3個の組み合わせの結果を見てみましょう。

In [4]:
head(ex1$turf[[1]])
combo rchX frqX 1 2 3 4 5 6 7 8 9 10
120 0.9986732 2.448993 0 0 0 0 0 0 0 1 1 1
119 0.9986732 2.431064 0 0 0 0 0 0 1 0 1 1
99 0.9957733 1.984364 0 0 0 1 0 0 0 1 0 1
110 0.9928939 2.185398 0 0 0 0 1 0 0 0 1 1
64 0.9915671 1.898693 0 1 0 0 0 0 0 0 1 1
109 0.9909833 2.106944 0 0 0 0 1 0 0 1 0 1

comboは組み合わせに振られた番号で特に気にする必要はないです。rchXはリーチの割合、frqXはウェイトをかけた際の値になります。それ以降は、該当している組み合わせを表してます。結果を見ると、item8、item9とitem10の組み合わせが一番良さそうですね。99%までリーチできており、ウェイトを考慮しても高い水準にいます。この3つの商品の組み合わせは棚から外さないようにしたいですね。では、6個の組み合わせの場合はどうでしょうか?

In [5]:
head(ex1$turf[[4]])
combo rchX frqX 1 2 3 4 5 6 7 8 9 10
210 1 4.268121 0 0 0 0 1 1 1 1 1 1
209 1 4.145541 0 0 0 1 0 1 1 1 1 1
203 1 4.125515 0 0 1 0 0 1 1 1 1 1
208 1 3.989761 0 0 0 1 1 0 1 1 1 1
182 1 3.981416 0 1 0 0 0 1 1 1 1 1
202 1 3.969734 0 0 1 0 1 0 1 1 1 1

組み合わせを6個にすると、リーチが1になっており全員がいずれかの商品は購買しているようです。ただ、ウェイトの部分で差が生じているので、item4よりimtem5のほうが優良顧客に好まれているので、棚に残しておいたほうが良いですね。

オプションの指定

turfRにはいくつかオプションがあるので、それを説明していきます。turf分析は多くの組み合わせを作成して、その効果を計算していますが、組み合わせの数が増えると計算量が爆発的に増えてしまいます。そういった多くの組み合わせに対応するために、計算の効率を高めために近似的に結果を求めることも可能です。先程と同じ計算をしてみましょう。

In [6]:
ex2 <- turf(turf_ex_data, 10, 3:6, depth=2, keep=10, mc=TRUE, nsims=1000, psims=NULL, sort="d")
3 of 10: 0.03942513 sec
4 of 10: 0.111243 sec
5 of 10: 0.128437 sec
6 of 10: 0.1155062 sec
total time elapsed: 0.4391501 sec 

重要なのは、keepは出力数、mcはモンテカルロシミュレーションを使うか、sortは出力時のソート軸になります。詳しい説明はドキュメントを参考にして下さい(※depthはよくわからない)。

In [7]:
ex2$turf[[1]]
combo rchX frqX 1 2 3 4 5 6 7 8 9 10
120 0.9230630 2.448993 0 0 0 0 0 0 0 1 1 1
118 0.9188489 2.352611 0 0 0 0 0 0 1 1 0 1
119 0.9049795 2.431064 0 0 0 0 0 0 1 0 1 1
116 0.8677249 2.341179 0 0 0 0 0 1 0 0 1 1
117 0.8654479 2.268991 0 0 0 0 0 0 1 1 1 0
110 0.8422442 2.185398 0 0 0 0 1 0 0 0 1 1
113 0.8409075 2.244797 0 0 0 0 0 1 1 0 0 1
115 0.8259357 2.262725 0 0 0 0 0 1 0 1 0 1
100 0.8217694 2.062818 0 0 0 1 0 0 0 0 1 1
114 0.8180974 2.179105 0 0 0 0 0 1 0 1 1 0

結果を比べてみると結構違いますね(汗)。また、同じ組み合わせだと、frqXの値は同じなのにrchXの値は異なっているという謎が。。。ともあれ、rchXの値は少し変わります。

終わりに

TURF分析は、考え方もわかりやすく、効率的な組み合わせを見つけ出すにはとても便利な分析手法です。ID×アイテムのON/OFFデータであれば、色々なデータに対して応用可能なので、是非、活かしてみて下さい。また、frqXの値がそのままで、rchXの値が変わる点は気が向いたら調べてみようと思います。一生向かないかもしれませんが。。。

Rカテゴリの最新記事