アソシエーション分析
一緒に買われるものの組み合わせを見つけます。「おむつを買う人はビールも買う」のような併売の傾向(バスケット分析)を調べるときに使います。
入出力
| ポート | 内容 |
|---|---|
| 入力データ | データ |
| 出力データ | データ |
Spark エンジンでは動きません。
入力の行も列も残りません。 出力は、見つかったルールを 1 行ずつ並べた別の表です。
出力の形
| 列名 | 内容 |
|---|---|
条件部 | 「これを買ったら」の側。複数のときはカンマ区切り |
結論部 | 「これも買う」の側 |
支持度 | その組み合わせが全体の何割に出るか |
確信度 | 条件部を買った人のうち、結論部も買った割合 |
リフト | 単独で買われる確率に比べて何倍買われるか |
支持度 → 確信度 → リフト の順に、すべて降順で並びます。 上から読めばよくある組み合わせから出てきます。
設定項目
- キー列を選択必須
- 何を 1 回の買い物とみなすか。レシート番号や顧客 ID。型の制限はありません。
- アイテム列を選択必須
- 商品名などの列。文字列の列だけ選べます。
- 支持度の下限値を設定必須
- 全体の何割以上に出る組み合わせを見るか。既定は
0.1(1 割)。 - ルールの最大長を設定必須
- 組み合わせる商品の数の上限。既定は
3。
オプション
- 結果をフィルタする指標を選択必須
- リフト値(既定)/ 確信度 / 支持度。
- 結果をフィルタする下限値を入力必須
- 既定は
1。上で選んだ指標がこの値未満のルールを落とします。
入力データの形
1 行が「どの買い物に、どの商品が入っていたか」 です。
| レシート番号 | 商品名 |
|---|---|
| R001 | おむつ |
| R001 | ビール |
| R002 | おむつ |
1 枚のレシートが複数行になっている形にしてから掛けてください。商品が横に並んでいるなら、先に縦持ち変換で縦にします。
キー列・アイテム列に欠損があるとエラーになります。
3 つの指標
| 指標 | 意味 | 見方 |
|---|---|---|
| 支持度 | その組み合わせが全体の何割に出るか | 高いほどよくある組み合わせ |
| 確信度 | A を買った人のうち B も買った割合 | 高いほど連動している |
| リフト値 | 単独で買われる確率に比べて何倍買われるか | 1 より大きければ意味がある |
リフト値が 1 未満の組み合わせは、偶然一緒に買われているだけなので、既定の下限 1 で外れます。ちょうど 1 のものは残ります。
出力の列名は リフト で、設定の選択肢は「リフト値」です。指すものは同じです。
下限値の決め方
支持度の下限を下げすぎると、組み合わせが爆発して終わりません。 既定の 0.1 から始め、結果が少なければ下げてください。
ルールの最大長を上げると、組み合わせの数が急に増えます。 既定の 3 から大きく上げないでください。
エラーと対処
有効なルールが作れない(支持度)
支持度の下限を満たす組み合わせが 1 つもないときに出ます。
有効なルールが作成できませんでした。「支持度の下限値」を現在の設定よりも小さくしてください。
直し方 — 支持度の下限を下げてください(0.1 → 0.05 など)。
有効なルールが作れない(フィルタ)
組み合わせは見つかったが、結果をフィルタする下限値で全部落ちたときに出ます。
有効なルールが作成できませんでした。「支持度の下限値」か、オプションの「結果をフィルタする下限値」を現在の設定よりも小さくしてください。
直し方 — どちらかの下限を下げてください。
キー列かアイテム列に欠損値がある
処理対象列に欠損値が含まれています。欠損値を除外するか補完してください。
直し方 — 欠損値処理で欠損のある行を落としてください。
列を選ばずに実行した
キー列を選択かアイテム列を選択が空のまま実行したときに出ます。前の処理で列名が変わり、選んでいた列が入力データからなくなったときにも同じメッセージです。
対象の列が選択されていません。
直し方 — 列を選び直してください。
よく使う例
1. 併売の組み合わせを見つける
一緒に買われる商品を知りたいとき。
入力(レシート 4 枚)
| レシート番号 | 商品名 |
|---|---|
| R001 | おむつ |
| R001 | ビール |
| R002 | おむつ |
| R002 | ビール |
| R003 | おむつ |
| R003 | お茶 |
| R004 | パン |
| R004 | 牛乳 |
設定
| 設定項目 | 値 |
|---|---|
| キー列を選択 | レシート番号 |
| アイテム列を選択 | 商品名 |
| 支持度の下限値を設定 | 0.1 |
| ルールの最大長を設定 | 3 |
| 結果をフィルタする指標を選択 | リフト値 |
| 結果をフィルタする下限値を入力 | 1 |
出力 — 6 行出ます。
| 条件部 | 結論部 | 支持度 | 確信度 | リフト |
|---|---|---|---|---|
| ビール | おむつ | 0.5 | 1 | 1.3333 |
| おむつ | ビール | 0.5 | 0.6667 | 1.3333 |
| パン | 牛乳 | 0.25 | 1 | 4 |
| 牛乳 | パン | 0.25 | 1 | 4 |
| お茶 | おむつ | 0.25 | 1 | 1.3333 |
| おむつ | お茶 | 0.25 | 0.3333 | 1.3333 |
読み方 — 支持度 の降順なので、リフト がいちばん大きい パン → 牛乳(4 倍)は 3 行目に出ます。上から読むと「よくある組み合わせ」の順で、「強い組み合わせ」の順ではありません。 強さで並べ替えたいときは、このあと行の並べ替えで リフト の降順にしてください。
向きで数が変わるのは 確信度 だけです。 おむつ → ビール は 0.6667(おむつを買った 3 枚のうち 2 枚)、ビール → おむつ は 1(ビールを買った 2 枚すべて)。支持度 と リフト は向きを変えても同じ値です。
2. 結果が 0 件のときに広げる
「有効なルールが作成できませんでした」と出るとき。
入力 — レシートが 1000 枚、商品の種類が 50 ほどあるデータ(下は先頭だけ)。よく出る組み合わせでも全体の 5% ほどで、既定の 0.1 には届きません
| レシート番号 | 商品名 |
|---|---|
| R001 | 商品A |
| R001 | 商品B |
| R002 | 商品C |
| R002 | 商品D |
設定
| 設定項目 | 値 |
|---|---|
| 支持度の下限値を設定 | 0.01 |
出力 — より珍しい組み合わせまで出ます。時間はかかります。
3. 3 つの組み合わせを見る
2 商品だけでなく、3 商品のまとまりも見たいとき。3 商品のルールを作るには、1 枚のレシートに商品が 3 つ以上並んでいる必要があります。
入力
| レシート番号 | 商品名 |
|---|---|
| R001 | おむつ |
| R001 | ビール |
| R001 | おしりふき |
| R002 | おむつ |
| R002 | ビール |
| R002 | おしりふき |
設定
| 設定項目 | 値 |
|---|---|
| ルールの最大長を設定 | 3(既定) |
出力 — 条件部 が おむつ,ビール、結論部 が おしりふき のように、カンマ区切りの行が出ます。
4. 強い関係だけに絞る
結果が多すぎて読めないとき。
入力
| レシート番号 | 商品名 |
|---|---|
| R001 | おむつ |
| R001 | ビール |
| R002 | おむつ |
| R002 | ビール |
| R003 | パン |
| R004 | ジャム |
| R005 | 牛乳 |
設定
| 設定項目 | 値 |
|---|---|
| 結果をフィルタする指標を選択 | リフト値 |
| 結果をフィルタする下限値を入力 | 2 |
出力 — 2 行だけになります。
| 条件部 | 結論部 | 支持度 | 確信度 | リフト |
|---|---|---|---|---|
| おむつ | ビール | 0.4 | 1 | 2.5 |
| ビール | おむつ | 0.4 | 1 | 2.5 |
パン ジャム 牛乳 はそれぞれ 1 枚のレシートにしか出ず、ほかの商品と一緒に買われていないので、組み合わせ自体ができません。
どのレシートにも同じ商品しか入っていない形(例 3 のような入力)だと、リフトはちょうど 1 にしかならず、下限 2 では全部落ちて有効なルールが作れない(フィルタ)になります。
5. 横に並んだ商品列から始める
1 行に商品が横に並んでいる形のデータしかないとき。
入力
| レシート番号 | 商品1 | 商品2 |
|---|---|---|
| R001 | おむつ | ビール |
設定 — 先に縦持ち変換で 商品1 商品2 を縦にし、できた値の列をアイテム列を選択に指定します。
出力 — 1 枚のレシートが複数行になるので、そのまま掛けられます。