
統計の知識なしでできる簡単なバスケット分析
バスケット分析とは、ある商品を購入した顧客が、ほかにどんな商品を購入しているのか、商品間の関連を見る分析手法です。
本来ある程度、前提知識が必要な手法ですが、QlikViewを使用すれば予備知識なしでも簡単にバスケット分析ができます。
ここでは、QlikViewを使用してバスケット分析をする方法をご紹介します。
はじめに
バスケット分析とは?
バスケット分析とは、ある商品を購入した顧客が、ほかにどんな商品を購入しているのか、商品間の関連を見る分析手法です。マーケットバスケット分析、併売分析、またはアソシエーション分析と呼ばれることもあります。(正確にはアソシエーション分析の一つがバスケット分析)
もともとは、購入された”商品”を分析するための手法ですが、もちろん商品以外にも応用可能で、たとえば以下のような使い道があります。
- サービス(サービスAとサービスB、両方契約している顧客は?)
- 日付(一昨年と昨年は契約があるが、今年は契約がない顧客は?)
- 地域(東京と大阪では契約があるが、名古屋では契約がない顧客は?)
QlikViewでの実現方法
QlikViewでバスケット分析をおこなうには、リストボックスのANDモードを使う方法と、SET分析を使う方法が考えられます。SET分析の方が適用範囲が広いのですが、その分指定も複雑になるため、ここではリストボックスのANDモードを使用します。
リストボックスのANDモードを使用するには、リストボックスで設定をする前に、データの取り込み方を工夫する必要があります。
詳細は後述しますので、ロードスクリプトの指定に注意が必要ということを覚えておいてください。
ファイルのダウンロード
ここでは以下のファイルを使用しますので、ダウンロードしてください。basket-analysis.zip
Zip形式ですので、ダウンロード後解凍してください。
以下ファイルが含まれています。

バスケット分析.xls
今回使用するデータです。
日付、得意先名(顧客の会社名)、商品名、売上金額からなる、売上明細のデータです。

データの取り込み
それではデータを取り込んでみましょう。まずはファイルを新規に作成し、[ロードスクリプトの編集]画面を起動します。

ロードスクリプトの最下行にカーソルをあわせて、[テーブルファイル]ボタンをクリックします。

「バスケット分析.xls」を選択します。

[終了]ボタンをクリックします。

ロードスクリプトが作成されました。

テーブル名を変更しておきましょう。
LOAD文の前に以下の指定を追加します。
売上:

バスケット分析をおこなうには、明細のテーブルに加えて、バスケット分析用のテーブルが必要です。
詳細は後述しますので、ロードスクリプトの最下部に以下の指定を貼り付けてください。
得意先商品名: LOAD Distinct 得意先名, 商品名 as 併売商品名 Resident 売上;

「得意先名」の項目名は変更せずに、「商品名」の項目名は「併売商品名」に変更しているという点を覚えておいてください。
以上でロードスクリプトは完成です。[OK]ボタンをクリックしてください。
データを取り込んでみましょう。
[リロード]ボタンをクリックします。

ファイルを保存してください。


データが取り込まれました。
[閉じる]ボタンをクリックしてください。

テーブルビューアーで、取り込まれたデータを確認してみましょう。
[テーブルビューアー]ボタンをクリックします。

テーブルの構造を確認しておいてください。
とくに二つのテーブルが、「得意先名」で紐付いているという点を覚えておいてください。
さきほど指定したLOAD文で、「商品名」の項目名が「併売商品名」に変更されていたと思います。

ユーザーインターフェースの作成
それでは、ユーザーインターフェースを作成して動作を確認してみましょう。シートの余白を右クリックし[リストボックスの追加]を選択します。

「併売商品名」と「商品名」を選択して[OK]ボタンをクリックします。

リストボックスが作成されました。
ここでは、画面左側に「商品名」、右側に「併売商品名」を配置しています。

つづいてテーブルボックスを作成します。
シートの余白を右クリックし[シートオブジェクトの追加]→[テーブルボックス]を選択します。

[項目]から「併売商品名」以外の項目を選択します。
[ロード順]ボタンをクリックして、項目の並び順を調節し[OK]ボタンをクリックします。

テーブルボックスが作成されました。

「得意先名」で並べ替えておいた方が後々わかりやすいため、「得意先名」のラベル部分をダブルクリックして並べ替えておいてください。

それでは、動作を確認してみましょう。
まず、そもそも「併売商品名」とはなんなのか、「商品名」とどう違うのかを理解するのが肝要です。
まず、「商品名」から値を選択します。その商品の明細のみに絞り込まれます。

一旦選択をクリアしてください。
つづいて、「併売商品名」から値を選択します。
テーブルボックスを見ると、さきほどと結果が違います。

テーブルボックスを得意先ごとに区切って見てみると、よく分かると思います。
どの得意先にも「2ドアコンパクト冷蔵庫S」が含まれています。

そのため、「併売商品名」で絞り込むと、まずその商品を購入したことのある得意先に絞り込まれて、さらにその得意先から売上明細が絞り込まれます。
つまりまとめると、「商品名」と「併売商品名」には以下の違いがあります。
「商品名」は、その商品に絞り込みます。
「併売商品名」は、その商品を一度でも購入したことのある得意先に絞り込みます。
「併売商品名」から複数の商品を選択してみます。
選択した”いずれかの商品”を購入したことのある得意先に絞り込まれます。

ANDモードの使用
では、ここからはリストボックスのANDモードを使用してみましょう。「併売商品名」のリストボックスを右クリックして[プロパティ]を選択します。

[基本設定]タブで、[ANDモード]にチェックを入れます。
[OK]ボタンをクリックしてください。

「併売商品名」から、再度複数の商品を選択してみてください。
こんどは選択した”すべての商品”を購入したことのある得意先に絞り込まれます。

これもテーブルボックスを得意先ごとに区切って見てみると、よく分かると思います。
どの得意先にも「2ドアコンパクト冷蔵庫S」と「AQUA A-20 20型」の両方が含まれています。

ANDモードが無効な場合(初期値)は、選択したいずれかの値に紐付くデータに絞り込まれます。
ANDモードが有効な場合は、選択したすべての値に紐付くデータに絞り込まれます。
さらにANDモードでは、否定(NOT)も使用できます。
一旦選択をクリアしてください。
「併売商品名」のリストボックスで値をクリックしたら、マウスのボタンを離さずにしばらく押し続けてください。
1秒ぐらいボタンを押したままにすると、下図のように赤くなりますので、マウスのボタンを離してください。
さらにそのまま押し続けると、白(無選択)→緑(AND)→赤(NOT)と繰り返し、選択状態が変わっていきます。

「2ドアコンパクト冷蔵庫S」を購入したことのない得意先が選択されています。
ANDとNOTを組み合わせた指定もできます。

ちなみに、否定(NOT)を複数指定した場合は、どれとも紐付かないデータに絞り込まれます。商品Aも商品Bも一度も購入したことがない得意先といった意味です。
以上で、ANDモードの基本的な使い方については終了です。
補足説明
すこし高度な設定
ANDモードを使用する場合、リストボックス中に件数(今回は得意先の件数)を表示しておくと便利です。「併売商品名」のプロパティを開き、[数式]タブで[追加]ボタンをクリックします。

以下の数式を入力します。
Count(得意先名)入力後、[OK]ボタンをクリックしてください。

数式が設定できました。

さらに、得意先の件数で並び替えもしておくと、より分析しやすくなります。
[ソート]タブを開き、[数式]にチェックを入れて[降順]を選択します。
数式にさきほどと、おなじ以下の数式を入力します。
Count(得意先名)以上で完成ですので、[OK]ボタンをクリックしてください。

数式が追加されますが、そのままでは見にくいため、下図を参考にサイズを調節してください。



もっとも多くの得意先に購入されているのは、「美白物語 全自動洗濯機」のようです。(115社)
「美白物語 全自動洗濯機」を選択してください。
「美白物語 全自動洗濯機」の購入者は、「あかるっく(ライト)」もよく購入していることが分かります。(16社)

さらに「あかるっく(ライト)」も選択してください。
「2ドアコンパクト冷蔵庫S」も購入している得意先が、4社あることが分かります。

一旦選択をクリアしてください。
もっとも購入した得意先が少ない「AQUA A-37 37型」を選択してみましょう。

「AQUA A-37 37型」はあまり売れていないとは言え、洗濯機(柔軟手洗い 全自動洗濯機と、美白物語 全自動洗濯機)と一緒に購入している得意先が、5社あることが分かります。

たとえばここから、「AQUA A-37 37型」と「柔軟手洗い 全自動洗濯機」で一旦絞り込み…

「Ctrl」キーを押しながら「AQUA A-37 37型」をしばらくクリックし続けて、「AQUA A-37 37型」に否定(NOT)を指定します。

「柔軟手洗い 全自動洗濯機」は購入したが、「AQUA A-37 37型」は購入していない得意先に絞り込まれます。
全部で85社あるようです。

これはサンプルデータなので、なんとも言えませんが、この85社に売り込みをかけることで、もっとも販売社数の少ない「AQUA A-37 37型」の売上回復に繋がるかもしれません。
こういった観点からデータを分析し、営業活動に活かしていくのが、バスケット分析です。
ANDモードの前提条件
ANDモードは、以下の条件を満たす場合のみ使用できます。この条件を満たさない場合(つまりほとんどの場合)、[ANDモード]のチェックボックスは無効になっています。
- その項目が、一つのテーブルにのみ存在すること
つまりこれは、ANDモードで使用する項目は、キー項目として使用できないということをあらわします。
- 二つの項目のみを持つテーブルの、二つ目の項目であること
- 重複した値が存在しないこと(一意であること)
- LOAD文に「Distinct」が指定されていること
三つ目と四つ目は実質おなじことを言っています。ただし、データが仮に一意であっても、LOAD文に「Distinct」の指定が必須であることに注意してください。
ロードスクリプトの解説
今回指定したLOAD文は、ANDモードの前提条件を満たすように作成されています。LOAD Distinct 得意先名, 商品名 as 併売商品名 Resident 売上;「Distinct」の指定は必須です。
項目は二つだけにします。
ANDモードで使用する「商品名」を二つ目の項目に指定します。さらに項目名を変更して、「売上」テーブルと紐付けられないようにします。
さいごの「Resident」は、すでに読み込みのテーブルを再読み込みする指定です。
この指定はANDモードとは直接関係ありません。再度Excelファイルからデータを読み込んでも結果はおなじですが、結果がおなじであれば、「Resident」を使用した方が処理が効率的になります。
振り返り
今回はバスケット分析についてご覧いただきました。以下に重要なポイントをまとめます。- バスケット分析をするには、バスケット分析用のテーブルを作成する。
- バスケット分析用のテーブルは以下のように作成する。
- 「Distinct」を指定する。
- 項目は二つのみ指定する。
- 一つ目の項目には、通常明細のテーブルとの関連付けに使用する項目を指定する。(一般的なバスケット分析では顧客をあらわす項目。)
- 二つ目の項目には、ANDモードで使用する項目を指定する。(一般的なバスケット分析では商品をあらわす項目。)
この項目は、通常明細のテーブルとの関連付けに使用されないように、asで項目名を変更する。
- 必須ではないが、「Resident」でテーブルを再読み込みして処理の効率化を図る。
- 「Distinct」を指定する。
- ANDモード
- リストボックスのプロパティで、[基本設定]タブの[ANDモード]にチェックを入れる。
- ANDモードが無効な場合(初期値)
選択した、いずれかの値に紐付くデータに絞り込まれる。
- ANDモードが有効な場合
選択した、すべての値に紐付くデータに絞り込まれる。
- 否定(NOT)の指定
値を選択した際、マウスのボタンを離さずにしばらく押し続ける。
- リストボックスのプロパティで、[基本設定]タブの[ANDモード]にチェックを入れる。
最後に…
今回は簡単なバスケット分析を紹介しました。より高度なバスケット分析では、商品Aを購入した顧客の何%が、商品Bも購入したのか割合を求めたり(信頼度)、サンプル数が少なすぎないか(偶然によるものではないのか)確認したりします。(支持度)
しかし、ある商品を購入した顧客が、ほかにどんな商品を購入しているのか、または逆に購入していないのかを簡単に確認したいということも多いと思います。
こういった簡易的なバスケット分析であれば、今回ご覧いただいたように、QlikViewでかなり簡単に実現できます。
QlikViewのANDモードに相当する機能は、他のツールではあまり見たことがありません。
ANDモードは個人的にも好きな機能の一つなのですが、前提条件がわかりにくいためか、QlikViewユーザーの方にも意外と知られていないようです。
今回の記事で興味を持った方は、ぜひ一度使ってみてください。
お疲れ様でした。