アソシエーション的な分析
KHcoderでアソシエーション的分析
テキストマイニング 共起ネットワーク
lhs rhs support confidence lhs.support lift 1 {みかん} => {バナナ} 0.6666667 1.0000000 0.6666667 1.0 2 {バナナ} => {みかん} 0.6666667 0.6666667 1.0000000 1.0 3 {ぶどう} => {みかん} 0.3333333 1.0000000 0.3333333 1.5 4 {みかん} => {ぶどう} 0.3333333 0.5000000 0.6666667 1.5 5 {ぶどう} => {バナナ} 0.3333333 1.0000000 0.3333333 1.0 6 {バナナ} => {ぶどう} 0.3333333 0.3333333 1.0000000 1.0
Rでアソシエーション分析を行うと、結果が数字の羅列であまりもの味気がないように思います。そこでテキストマイニングの手法である共起ネットワークを活用してアソシエーション分析結果をビジュアル化できないものかと考えました。
共起ネットワークはテキストに含まれる「語」が文書のどこに何回出現するのかをもとに「語」と「語」の距離をJacccard係数になおしてビジュアル化することができます。
ひとつの文書(テキストマイニングではH5・段・文)をひとつのバスケットとみなせば、どのバスケットに何が何個入っているのかを分析することができます。アソシエーション分析は「support」「confidence」「lift」が主要な数値ですが、共起ネットワークのJacccard係数でアイテムとアイテムの相性をみることは十分に可能です。
さっそく実践してみるといい感じの出力を得ることができました。。カレールウを中心にして、根菜類、牛肉、福神漬が共起していることがわかります。カレーといえばサラダと合わせるのでしょうか、「きゅうり」「レタス」のようなサラダ用野菜などが、くっきり・はっきり表示されています。
分析方法
<手順1>
カレールウのSKUコード表をつくります。各種ブランド、甘口、中辛、辛口などバラバラのアイテムをすべて「カレールウ」にまとめるための手順です。バーモント、ジャワ、ゴールデンなどそれぞれのSKUコードがカレールウであることがわかる必要があります。カレールウのクラスが登録してあればサクッと作成できますが、なければ結構難儀な作業です。
カレールウSKU一覧 | |
商品コード | 商品名称 |
4902402853870 | バーモントカレーチュウカラ |
4902402853856 | バーモントカレーカラクチ |
:下へ続きます | :下へ続きます |
<手順2>
POSレジデータからバスケット番号をつくります。バスケット番号はユニークでなければなりません。「YYYYMMDD」&「取引時刻」&「レジ番号}&「担当者コード」このくらい数字をくっつければユニークのバスケット番号になります。
バスケット番号をデータの全行に付与します。これでバスケット番号でソートすれば各バスケットに入っている全アイテムをみることができるようになります。
カレールウSKUコードを含む(カレールウが入っている)バスケット番号のみをとりだします。
カレールウの行だけでなくカレールウを含むバスケット番号の全行(全アイテム)をとりだします。これでカレールウと同時に購入されているアイテムをみることができます。
バーモントカレー甘口、ジャワカレー中辛などの商品名称をすべて「カレールウ」に書き換えます。バーモントカレー甘口と同時購買されているアイテム、ジャワカレー中辛と同時購買されているアイテムをみたい場合は書き換えないでください。
バスケット番号 | 商品コード | 商品名称 |
20180129161900044767 | 4902402853870 | カレールウ |
20180129161900044767 | 4903117128970 | 国産カレー専用福神漬 |
20180129161900044767 | 4903310130114 | リリィミカンカン425g |
20180129161900044767 | 4904553061685 | タツミヤ メンツキフクマメ コクナイサン |
20180129161900044767 | 4964777022664 | コクサンカットワカメ |
<手順3>
手順2で作成したデータを、行が「バスケット番号」列が「商品名」にしたクロス集計表に変換します。そしてトランザクション型に変換します。カレールウが入っているバスケット番号だけを抽出したので、各行に必ず「カレールウ」がアイテムとして入っているはずです。
バスケット番号 | ||||||
20180129161900000001 | カレールウ | 人参 | ゃがいも | 交雑牛カレーシチュー用 | 玉ねぎ | きゅうり |
20180130121200000002 | カレールウ | 玉ねぎ | ||||
20180202121400000003 | カレールウ | 人参 | 新メークイン |
<手順4>
手順3のデータからバスケット番号の列を削除してテキスト形式(.txt)へ変換して別名で保存します。このデータをKHcoderへ取り込みます。手順2で作成したデータのなかから商品名を抜き出して「カレールウ」も含めて強制抽出語に設定します。 共起ネットワーク分析を実施します。
タブローでアソシエーション的
ビジュアルは弱いが
KHcoderでいい感じのビジュアルが出来上がることは確認できました。でも、あまりにも手間を要します。ビジュアルなし、リフト値とかの専門数値なしであればタブローのグルーピング、フィルター、並び替え機能をつかって、バスケット内のアイテムとアイテムの関係を確認することができます。
準備するデータ
POSレジデータです。ユニークになるバスケットをつくります。共起ネットワークのときと同じ手順です。sum(点数)はなくても構いません。
バスケット番号,商品コード,商品名称,Sum (点数) 20180129094400044536,4908011614246,ナチュレ4Pイチゴ,3 20180129094400044536,4969465103083,アジツケモズク,1 20180129094600025938,0000000000101,きゅうり,2 20180129094600025938,0000049378221,アカタマゴLL,1
カレールウだけの商品コード表です。
商品コード,商品名称 4901002133535,ゴールデンカレーカラクチ198g 4901002146092,ゴールデンカレーチュウカラコバコ
タブローの手順
POSレジデータの商品名称を「行シェルフ」へ入れます。バスケット番号がメジャーになっているときはディメンションへ移動して文字列に変更してください。
カレールウだけの商品コード表に移動して「商品コード」をリンクさせます。「商品コード」をフィルターフィールドへ移動させるとカレールウだけの商品コード表に含まれる商品名があらわれます。カレールウにチェックを入れて閉じます。
商品名をすべて選択して右クリック、クリップのマーク(メンバーのグループ化)を押します。
各種カレールウがひとまとめになりましたので、「別名の編集」で名称をカレールウにします。これでバーモント、ジャワ等の名称がすべて「カレールウ」に変更されました。
バスケット番号をディメンションから「行」に移動します。現在は商品名称「カレールウ」のみを選択してフィルターがかかった状態です。商品名はカレールウだけが表示されています。そこにバスケット番号を入れるというのは、カレールウが入ったバスケット番号だけが入っているということです。バスケット番号を上から下まですべて選択して右クリック「保持のみ」を押します。これでカレールウが入っているバスケットだけを選択した状態になりました。
バスケット番号にフィルターがかかったままにして、商品名称のフィルターを外します。これでカレールウが入っているバスケットに入っている全商品が表示されている状態になりました。更に、バスケット番号を「行」から外して、バスケット数をカウントする計算式を投入します。
バスケット数をカウントする計算式 countd([バスケット番号])
バスケット数降順で並び替えます。カレールウが入ったバスケット数が300あることがわかります。その300のうち78個のバスケットに人参が、72個のバスケットに玉ねぎが入っています。
各アイテムが入っているバスケット数÷300=カレールウと同時に購買される率です。
同時購買率計算式 [バスケット数] / lookup(([バスケット数]),first()+0)
これで完成です。
コメントを残す