0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカルLLMで併売分析してみる

0
Posted at

無理だろうなとは思いつつ、ローカルLLMに購買データを併売分析させるとどうなるのか気になったので試してみました。

プロンプトの工夫で多少は改善するかもしれませんが、現時点の結論はこのようになっています。

  • モデルによっては想定以上にそれっぽい結果が返ってくるものの、実用的な結果を得るのは厳しそう

また、コンテキストを維持できないため非常に少量のデータしか扱えないという課題もありそうです。

はじめに

ここでは、次のLLM1をollamaで実行して試しました。

  • gemma4
  • qwen3.5
  • gemma3:12b
  • phi4

まず、Kaggle から入手した分析用のデータではコンテキストを全く維持できず処理できなかったため2、適当に作成した100件の購買データを用いる事にしました。

購買データは次のようにシンプルな内容になっています。(実際のファイルはこちら

  • 1行が1つの取引
  • アルファベット1文字で購入した商品を表現3
data/sales1.basket
C,S,M,R
T,Y,C
P,Y,C,M
O,W,L,T
R
O,U,R,L,Y
P
W,C
T,O,W,B,C,Y
C,T,W,B,Y,F,D
B
...省略
B,F
C,F,N

組み合わせ毎の集計も含めて購入数の多いものをピックアップするとこのようになっています。

購入数 Top 50
[
  [ "B", 42 ],    [ "C", 41 ],    [ "S", 35 ],
  [ "W", 25 ],    [ "R", 23 ],    [ "O", 18 ],
  [ "Y", 16 ],    [ "T", 16 ],    [ "P", 16 ],
  [ "B,S", 16 ],  [ "F", 15 ],    [ "N", 15 ],
  [ "C,S", 14 ],  [ "D", 14 ],    [ "R,S", 13 ],
  [ "B,W", 12 ],  [ "B,C", 12 ],  [ "M", 11 ],
  [ "O,W", 11 ],  [ "C,R", 10 ],  [ "C,N", 10 ],
  [ "S,W", 10 ],  [ "T,Y", 9 ],   [ "O,T", 9 ],
  [ "C,W", 9 ],   [ "B,R", 9 ],   [ "C,T", 8 ],
  [ "T,W", 8 ],   [ "O,Y", 8 ],   [ "O,R", 8 ],
  [ "B,Y", 8 ],   [ "B,O", 8 ],   [ "C,F", 8 ],
  [ "C,D", 8 ],   [ "R,W", 8 ],   [ "C,Y", 7 ],
  [ "B,D", 7 ],   [ "B,N", 7 ],   [ "B,P", 7 ],
  [ "B,M", 7 ],   [ "C,R,S", 6 ], [ "C,P", 6 ],
  [ "O,T,Y", 6 ], [ "B,O,W", 6 ], [ "B,T", 6 ],
  [ "D,W", 6 ],   [ "B,F", 6 ],   [ "N,S", 6 ],
  [ "S,Y", 6 ],   [ "O,S", 6 ]
]

一応、次のような調整を加えているつもりです。

  • B,C,S あたりは組み合わせに関係なく普通によく売れる商品の想定
  • O,T,Y の組み合わせは購入率が比較的高くなるように調整

そのため、従来の併売分析の観点では次のような結論を導き出せるかが一つの評価軸になると考えています。

  • B,C,SよりもO,T,Yの組み合わせへ着目

アソシエーション分析による確認

意図したようなデータになっているのか、Aprioriアルゴリズムで確認しておきます。

apriori.py
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules

import pandas as pd
import sys

data_file = sys.argv[1]
min_support = float(sys.argv[2])
min_threshold = float(sys.argv[3])

with open(data_file) as f:
    dataset = [line.strip().split(',') for line in f]

te = TransactionEncoder()

te_a = te.fit(dataset).transform(dataset)

df = pd.DataFrame(te_a, columns=te.columns_)

freq = apriori(df, min_support=min_support, use_colnames=True)

rules = association_rules(freq, metric='lift', min_threshold=min_threshold)

print( rules[['antecedents', 'consequents', 'lift', 'confidence', 'support']] )

Top 50 を対象へ含むように min_support を 0.06 にして実施すると、このような結果が得られました。

実行結果
$ uv run apriori.py data/sales1.basket 0.06 3

          antecedents        consequents      lift  confidence  support
0      frozenset({O})     frozenset({T})  3.125000    0.500000     0.09
1      frozenset({T})     frozenset({O})  3.125000    0.562500     0.09
2      frozenset({T})     frozenset({Y})  3.515625    0.562500     0.09
3      frozenset({Y})     frozenset({T})  3.515625    0.562500     0.09
4   frozenset({O, B})     frozenset({W})  3.000000    0.750000     0.06
5      frozenset({W})  frozenset({O, B})  3.000000    0.240000     0.06
6   frozenset({O, T})     frozenset({Y})  4.166667    0.666667     0.06
7   frozenset({O, Y})     frozenset({T})  4.687500    0.750000     0.06
8   frozenset({T, Y})     frozenset({O})  3.703704    0.666667     0.06
9      frozenset({O})  frozenset({T, Y})  3.703704    0.333333     0.06
10     frozenset({T})  frozenset({O, Y})  4.687500    0.375000     0.06
11     frozenset({Y})  frozenset({O, T})  4.166667    0.375000     0.06

O, T, Y はお互いのリフト値(関連商品の購入率をどの程度引き上げたか)が高く、一応は狙い通りになっているようです。

ローカルLLMによる併売分析

Ollama JavaScript Library を利用した以下のコードで実行しました。

今回試したLLMの中で thinking に対応しているのはgemma4qwen3.5だけでしたが、LLMの思考プロセスを確認できる点が非常に有用でした。

basket.js
import ollama from 'ollama'

const model = process.argv[2]
const data = process.argv[3]

const content = `
次の購買データを併売分析して下さい。
1行が1つの取引、コンマで区切られたアルファベットが購入商品となっています。

# 購買データ

${data}
`

const msg = {
    role: 'user',
    content
}

const res = await ollama.chat({
    model,
    messages: [msg],
})

console.log(res.message.content)

if (res.message.thinking) {
    console.log('# Thinking')
    console.log(res.message.thinking)
}

実行例はこのようになります。

実行例
$ node basket.js gemma4 "$(cat data/sales1.basket)"

gemma4の場合

まず、データ件数(100件)が合っているのが驚きです。

それなりに購入数の多い組み合わせを抽出しており、B,C,S を含むグループを "生活必需品セット"、O,T,Y を含むグループを "関連する消耗品グループ" へ含めている点は興味深いところです。

単品ではBが最も多く、組み合わせではB,Sが最も多い点を見落としているように見えます。

実用性は別にして、全体的にそれっぽい内容になっているように思います。

gemma4結果例
この度は、購買データの併売分析のご依頼ありがとうございます。

提示された膨大な取引データ(計100件)を基に、どの商品が一緒に購入されやすいか(併売性)を分析しました。

---

## 🛒 併売分析サマリーレポート

### 📊 全体的な傾向(エグゼクティブサマリー)

この購買データから最も明確に読み取れるのは、「**複数のアイテムが同時に購入される傾向が非常に強く、特定のコア商品群(C, S, W, B, R, T)を中心としたバンドル購買が発生している**」という点です。

単一商品を購入するケースはありますが、例外的に少ないです。これは、顧客が生活必需品や関連アイテムをまとめて購入する「買い回り購買」のパターンが多いことを示唆しています。

特に「**C (コア商品)**」「**S (副次商品)**」「**W (関連消耗品)**」「**B (基本的な必需品)**」の4商品は、非常に高い頻度で他の商品と一緒に購入されています。

### ✨ 最も売れ筋の組み合わせ(強度の高い併売ペア)

以下の商品は、**一緒に購入される確率が極めて高い「コアペア」**と判断できます。これらは店頭での陳列やセット販売(バンドル)を検討する際の最優先候補です。

| ペア (A, B) | 併売回数(目安) | 購買性からの示唆 | 推薦アクション |
| :--- | :--- | :--- | :--- |
| **C, S** | ★★★★★ | 最も頻繁に共存する組み合わせ。必須のペアです。 | 「CとSをセットで買うと割引」などのセット販売の導入。 |
| **W, B** | ★★★★☆ | 基礎的な必需品が揃っているグループ。 | 関連アイテム(例:Wを使用する道具)を陳列する際に、Bを近くに配置する。 |
| **R, S** | ★★★★☆ | 比較的安定して共売するペア。 | 「Rを購入した顧客」に対して「Sのクーポン」を配布する。 |
| **T, C, P** | ★★★★☆ | 3商品が同時に購買される「強力なグループ」を形成しています。 | 3点セットのプロモーション企画(例:Tの購入でCとPの割引)。 |
| **C, W, B** | ★★★☆☆ | 汎用性の高い3商品がグループを形成。 | 比較的安価な「スタートキット」として販売する。 |

---

### 🧺 注目すべき「グループ購入」の動向

特定の複数のアイテムがまとめて購買される「グループ」を特定しました。これは、顧客が特定の用途やライフスタイルに合わせてまとめて購入していることを示しています。

#### 1. 🌟 生活必需品セット (C, S, B, N, R)
*   **傾向:** `C``S``B``N``R`が同時に購入されるケースが多く見られました。これは、特定のカテゴリー(例:衛生用品、基本的な消耗品)のバリエーションを網羅的に購入する傾向です。
*   **示唆:** これらの商品をまとめて購入できる「ファミリーパック」や「ストック買い向けセット」として提案する価値が高いです。

#### 2. 🌿 関連する消耗品グループ (O, W, R, S, Y, T)
*   **傾向:** `O``W``R``S``Y``T`などがまとめて購入されるケースがあります。これらは「何かを維持・管理するための消耗品」としての側面が強いです。
*   **示唆:** 季節や利用シーン(例:夏場のケア用品など)に合わせた「トータルケアセット」として提案することで、購買単価の向上に繋がります。

### 🎯 購買データに基づいたアクションプラン(提案)

以上の分析結果に基づき、具体的な店舗オペレーションやマーケティング施策を提案します。

#### 1. 陳列・配置戦略(物理的な改善)
最も売れ筋のコアペアである「**C (コア商品)とS (副次商品)**」を常に目線に入りやすい、棚の高さの高い場所やレジ前など「目立つ場所」に配置し、購買の機会損失を防ぐことが最優先です。

#### 2. プロモーション・販促戦略(デジタル/販促物の活用)
*   **「コンボ割引」の導入:** 「C+S」の組み合わせに、少し割引を加える(例:両方買うと合計より5%引き)。
*   **購買履歴に基づくレコメンド:** 顧客が「R」を購入した際、システム上で「一緒に買うと良い商品:S」としてポップアップ表示させる。(バスケット分析の応用)

#### 3. 品揃え・商品開発の視点
***C, T, P**」や「**W, B, M, S, C**」など、特定のグループの組み合わせが頻出している場合、これらの組み合わせを前提とした「**プレミアムバンドル商品**」を開発し、新製品として投入することを検討する価値があります。

---

**【免責事項】**
本分析は、ご提供いただいた過去の購買データに限定した**記述的分析**です。実際の市場の変化や競合状況、顧客の心象といった要因は考慮されておらず、あくまでデータに基づく可能性が高い相関関係を示すものです。
# Thinking
Here's a thinking process to generate the co-occurrence analysis:

1.  **Understand the Goal:** The request asks for a "basket analysis" (併売分析) based on a provided dataset of transaction data. Each row is a transaction, and comma-separated letters are the purchased items.

2.  **Analyze the Data Format:**
    *   The data is a list of transactions.
    *   Items within a transaction are separated by commas.
    *   Some transactions are empty or contain single items.
    *   The items are single uppercase letters (A, B, C, D, F, G, H, L, M, N, O, P, R, S, T, W, Y, Z).

3.  **Data Cleaning/Preprocessing (The core step):**
    *   The input data is provided as a block of text. I need to parse each line into a list of unique items (since the order doesn't matter for co-occurrence, and duplicates within a single line are unlikely but good practice to handle).
    *   *Self-Correction/Refinement:* The input data has single letters on their own lines (e.g., `R`, `P`, `C`, etc.). These are valid transactions.

    *   **Transaction List (Mental or Scratchpad Processing):**
        1. `C,S,M,R`
        2. `T,Y,C`
...省略
4.  **Strategy for Co-occurrence Calculation:**
    *   Co-occurrence (A $\rightarrow$ B) is the count of transactions where both A and B appear together.
    *   Since the dataset is large, listing every single pair is impractical.
    *   I must focus on finding **Strong Association Pairs** and **Key Product Groups**.

5.  **Execution (Counting Pairs):**
    *   *Initial focus:* Which items are bought together frequently?
    *   *(Self-Correction: This requires programmatic counting. I will simulate the counting process and structure the output for readability.)*

6.  **Structuring the Output:**
    *   **Overview/Executive Summary:** General findings.
    *   **High Co-occurrence Pairs (Strong Suggestions):** The most impactful findings.
    *   **Key Product Groups/Bundles:** Transactions that frequently include a core set of items.
    *   **Conclusion/Recommendation:** How to use the insights (e.g., placement, promotions).

7.  **Drafting the Analysis (Focusing on commonalities):**
    *   *Observation Check:*
        *   `C` (C) is extremely common (appears in almost every transaction).
        *   `B` (B) is also very common.
        *   `S` (S) is frequent.
        *   `W` (W) is frequent.
        *   `R` (R) is frequent.
        *   `T` (T) is frequent.
        *   `F` (F) is frequent.
    *   *Strong Pairs:*
        *   (C, S): Very high. (e.g., C,S,M,R; C,S,N; C,S,L,D; B,P,C,S; etc.)
        *   (W, B): High. (e.g., T,O,W,B,C,Y; R,O,W,B,S; W,B,M,S,C; W,B; etc.)
        *   (R, S): High. (e.g., F,R,S; S,R,C; R,P,S; etc.)
        *   (C, T): High.
        *   (O, W): Moderate/High.

8.  **Final Review and Tone:** Ensure the output is professional, insightful, and directly answers the prompt using the identified patterns. (Use Japanese business terminology.) (Self-correction: I must acknowledge the sheer volume of transactions and the general trend of highly purchased items.) (Added the limitation note: This is a descriptive analysis, not predictive.)

qwen3.5の場合

thinking に時間をかけすぎて本文が無いというケースが頻繁に発生しました。

ollama runで直接実行すると、時間がかかるものの本文は出力されるため、タイムアウト4で打ち切られているのかもしれません。

thinking でアルファベット毎の商品を類推しようとしている点が非常に興味深いところですが、考え過ぎの傾向があるようにも思います。

データ件数や購入数が基本的に合っていませんが、それなりに購入数の多いものをピックアップしています。

こちらも実用性は別にして、それっぽい内容になっていると思います。

また、gemma4と同様にCC,Sの方が最も多いとしている(間違っている)点は興味深いところです。

qwen3.5結果例
ご提示いただいた売上データ(1 行 = 1 取引)をベースに、アイテムの購買頻度、組み合わせ分析(コバリング)、クロスセル戦略について詳細な分析レポートを作成しました。

---

# 📊 購買データ分析レポート

## 1. データ概要
*   **取引数:** 約 80 件(ご提供のテキスト行数)
*   **アイテム:** 10 種類(A, B, C...)
*   **特徴:** アイテム「C」が極めて頻出しており、これをベースにした「コアバンドル」が見受けられます。

## 2. アイテム購入頻度 (Top Items)
各アイテムが何回出現したかの大まかな頻度を算出しました。

| ランク | アイテム | 購入回数(目安) | 備考 |
| :--- | :--- | :--- | :--- |
| **1** | **C** | **45 回** | 最も頻出する「定番商品」 |
| **2** | **S** | **40 回** | C とほぼ同等の人気 |
| **3** | **B** | **38 回** | 定番商品 |
| **4** | **W** | **30 回** | 中程度人気 |
| **5** | **T** | **25 回** | 中程度人気 |
| **6** | **R** | **22 回** | 中程度人気 |
| **7** | **M** | **20 回** | 中程度人気 |
| **8** | **F** | **18 回** | |
| **9** | **Y** | **15 回** | |
| **10** | **P, O, D, N** | **各 10 回** | リング/季節商品 |
| **11** | **L, H, G** | **各 2 回** | 低頻出アイテム |

## 3. コバリング分析 (組み合わせ頻出)

最もよく一緒に購入される組み合わせ(ペア、トリプル)を抽出しました。
**サポート (Support)** = 2 商品が同時に購入される割合。

### 🏆 上位 3 ペア (Top Pairs)
`C``S` が最強の組み合わせです。また `C``B` も非常に頻出します。

| 組み合わせ | サポート | 特徴 |
| :--- | :--- | :--- |
| **{C, S}** | **90%** | 最強の黄金ペア。C を買えば S もほぼ買う |
| **{C, B}** | **85%** | 定番セット。C と B の相乗効果が高い |
| **{B, S}** | **80%** | C がなくても B と S はよくセットで買う |
| **{C, W}** | **75%** | C の付帯需要として W がよく購入される |
| **{T, C}** | **60%** | C の代替品や相補品として購入される |

### 🏅 上位 3 トリプル (Top Triples)
3 商品がセットになるパターンです。

| 組み合わせ | サポート | 特徴 |
| :--- | :--- | :--- |
| **{C, B, S}** | **70%** | 基本バンドル。3 つ揃うと満足度が高い |
| **{C, S, W}** | **65%** | 基本バンドル + W の強化セット |
| **{C, B, T}** | **60%** | 基本バンドル + T の強化セット |

## 4. クロスセル戦略 (アクションプラン)

売上向上のための具体的な提案です。

### 💡 バンドル提案 (推奨セット)
*   **📦 "The Basic Set"**: `{C, B, S}`
    *   *理由:* 最も購入される組み合わせ。3 個セットで価格優遇すると購買ハードルが下がりやすいです。
*   **📦 "The Value Set"**: `{C, B, S, W, M}`
    *   *理由:* 基本セットをベースに、中規模のアイテムを足して、1 度でまとめて購入する顧客(家族向けなど)にアピール。
*   **📦 "The Snack Set"**: `{C, T, F, Y}`
    *   *理由:* 基本セット以外に、嗜好品や小物(F, Y)を合わせた「お楽しみセット」。

### 🛒 クロスセル推奨 (ルール)
*   **C を購入した客**: `S``B` を同時にカートに入れるよう促す。
*   **W を購入した客**: `T``C` を紹介する(`T, W` というペアが強力)。
*   **M を購入した客**: `C``B` を紹介する(`M, C` というペアが強力)。
*   **R を購入した客**: `B``C` を紹介する(`R, B, M` などが有力)。

### 🎯 具体的な施策
*   **カート追加時の推奨:** 顧客が `C` を追加した瞬間に、`S``B` のバナーを表示する。
*   **価格設定:** 基本セット `{C, B, S}` を単品合計よりも 10% 安価で販売する。

## 5. まとめ
*   **コアアイテム:** `C`, `S`, `B` が基本。これを軸にセット販売を強化。
*   **付帯需要:** `C` が売れると、自動的に `S``B` も売れる。
*   **次のステップ:** 基本セット `{C, B, S}` の在庫確保と、その価格優遇施策の実施を推奨します。

この分析をベースに、ご自身の事業に活かしてみてください!何か追加で必要な分析があれば、お知らせください。

---

*Note: 本分析はご提供いただいたテキストデータを抽出・分析したものです。実際の業務では、在庫数や単価データを加味した分析を別途行ってください。*
# Thinking
Here's a thinking process that leads to the suggested analysis:

1.  **Understand the Goal:** The user wants an analysis of the provided purchase data. The specific analysis requested is "併売分析" (Cross-selling/Cobbling Analysis). This means I need to look for combinations of items that are frequently purchased together to identify associations or trends.

2.  **Analyze the Input Data:**
    *   **Format:** Each line is one transaction.
    *   **Content:** Comma-separated letters (A-Z) representing products/items.
    *   **Empty lines:** Some lines might be empty (e.g., `D,`, `B,`, `C,`). I need to handle these as potentially invalid or specific single-item purchases (though `D,` looks like a typo for just `D` or an empty list, but looking closely at `T,P,B,W,F,R,C` etc., `D,` suggests `D` is the item and the comma is just formatting, OR it's an empty transaction? Let's check the lines carefully).
    *   *Correction on Input Parsing:*
        *   `C,S,M,R` -> {C, S, M, R}
        *   `T,Y,C` -> {T, Y, C}
        *   ...
        *   `D,` -> This looks like `D` followed by a comma. Usually, in such CSV-like data, a trailing comma might be an empty field. However, given the context "comma-separated alphabet", `D,` likely means just item `D`. Wait, looking at `C,T,P,D,N` vs `D,`. If `D,` means `D` + empty, I should treat it as `D`. Or does it mean just `D`? Let's assume `D` is the item.
...省略
3.  **Data Pre-processing (Mental or Scratchpad):**
    *   I need to count occurrences of each Item.
    *   I need to count co-occurrence of pairs (or larger sets).
    *   I should calculate Support, Confidence, Lift (conceptually) or just frequency of pairs.
    *   Since I am an AI text model, I cannot run actual code to process this, but I can simulate the processing or provide a structured analysis based on the provided text. I need to be careful not to hallucinate data. I will count the data manually or logically to derive the answer.

    *   *Constraint:* The input is small (around 100 lines?). Counting manually is error-prone. I need to estimate or group the most obvious patterns. However, for a high-quality response, I should try to count accurately.
    *   *Strategy:* I will identify the frequent items first, then the frequent pairs.
    *   *Items:* A, B, C, D, F, G, H, L, M, N, O, P, R, S, T, U, W, Y, Z. (And maybe others not seen).
    *   Let's list the unique items seen:
        A, B, C, D, F, G, H, L, M, N, O, P, R, S, T, U, W, Y, Z.
    *   Let's try to count frequencies of single items (approximate is okay, but better to be precise if possible).
    *   Actually, looking at the request "併売分析" (Cross-selling Analysis), the user usually wants to know "Which products are bought together often?" or "Which product goes well with Product X?".
...省略
    *   *Simulation of Counting:*
        I will iterate through the text mentally to get counts.
        (This is a heavy task to do mentally without code. I need to be careful).
        Let's categorize the transactions.
        Single item: R, P, W, F, C, S, O, B, T, M, H, A, N, D, G, Z.
        Pairs/Groups.
        Frequent Itemset: Look for C, B, S, W, R, T, O, F, M, P, Y.

        *Common Items:*
        C (Cigarettes? Candy? Coffee? Let's assume generic items).
        S (Soda? Soap?).
        R (Bread? Rice?).
        T (Tissues?).
        Y (Yogurt?).
        M (Milk?).
        B (Bread?).
        F (Fruit?).
        W (Water?).
        O (Oil?).
        P (Pet?).
        D (Dairy?).
        N (Nut?).
        L (Liquor?).
        H (Ham?).
        G (Grape?).
        Z (Zebra?).

        *Observation:* There are many items appearing multiple times.
        C appears very frequently.
        B appears very frequently.
        S appears very frequently.
        T appears very frequently.
        R appears frequently.
        W appears frequently.
        Y appears frequently.
        M appears frequently.
        F appears frequently.
        P appears frequently.
        O appears frequently.
...省略
    *Self-Correction on counts:* I will use approximate counts based on visual inspection to avoid errors, but state they are estimates.
    Actually, I can try to be more specific.
    Let's assume the counts are roughly proportional to their appearance in the text provided.
    `C` is in almost every line.
    `S` is in ~80% of lines.
    `B` is in ~60% of lines.
    `W` is in ~50% of lines.
    `T` is in ~40% of lines.
    `R` is in ~40% of lines.
    `M` is in ~40% of lines.
    `F` is in ~30% of lines.
    `Y` is in ~20% of lines.
    `P` is in ~20% of lines.
    `O` is in ~20% of lines.
    `D` is in ~20% of lines.
    `N` is in ~20% of lines.

    *Top Pairs:*
    `C, S`: High support.
    `C, B`: High support.
    `C, W`: Medium-High support.
    `B, S`: Medium-High support.
    `T, C`: Medium-High support.

    *Top Triples:*
    `C, B, S`: Highest support.
    `C, S, W`: High support.
    `C, B, W`: Medium support.
    `C, B, T`: Medium support.

    *Let's generate the response.*

gemma3:12bの場合

全体的に数が合っていませんが、B,C,S を含め購入数の多いものをピックアップしているように見えます。

上記2つのモデルと比べると明らかに質が落ちている印象です。

gemma3:12b結果例
## 購買データ併売分析結果

提供された購買データを併売分析しました。以下に結果を示します。

**1. 個別商品の購入頻度:**

| 商品 | 購入回数 | 割合 (%) |
|---|---|---|
| C | 25 | 17.2 |
| B | 25 | 17.2 |
| S | 21 | 14.4 |
| R | 17 | 11.6 |
| T | 16 | 10.9 |
| W | 15 | 10.3 |
| P | 13 | 8.9 |
| F | 12 | 8.2 |
| O | 11 | 7.5 |
| Y | 10 | 6.9 |
| M | 9 | 6.2 |
| D | 7 | 4.8 |
| N | 7 | 4.8 |
| L | 4 | 2.7 |
| H | 3 | 2.0 |
| A | 1 | 0.7 |
| G | 2 | 1.4 |
| Z | 1 | 0.7 |

**上位商品はC,B,Sです。** これらの商品は、他の商品と一緒に購入されることが多いと考えられます。

**2. 併売ペア (頻繁に一緒に購入される組み合わせ):**

| ペア | 購入回数 |
|---|---|
| C,B | 7 |
| B,S | 6 |
| C,S | 6 |
| C,R | 3 |
| B,C | 3 |
| C,T | 3 |
| B,P | 3 |
| W,C | 3 |
| S,R | 3 |
| C,F | 2 |
| S,C | 2 |
| T,C | 2 |
| F,C | 2 |
| B,M | 2 |
| R,O | 2 |
| C,N | 2 |
| W,B | 2 |
| B,Y | 2 |
| F,R | 2 |

**C,B,Sの組み合わせは、頻繁に一緒に購入されている**ことがわかります。  これらの商品が関連性があるか、あるいは特定の顧客層に人気がある可能性があります。

**3. 併売グループ (3つ以上の商品を一緒に購入するパターン):**

いくつか例を挙げます。

*   C,B,S
*   B,C,S,R
*   C,T,W,B,Y,F,D
*   T,R,O,F,B,C
*   P,B,O,W,A,S

**これらのグループ分析は、顧客のニーズや購買行動をより深く理解するのに役立ちます。** 例えば、C,T,W,B,Y,F,Dを一緒に購入する顧客は、特定の趣味やライフスタイルを持っている可能性があります。

**考察:**

*   **C, B, S** は、顧客にとって重要な商品である可能性が高いです。これらの商品の販売促進や、これらの商品と一緒に他の商品をレコメンドするなどの施策が有効かもしれません。
*   **併売ペア** を分析することで、関連性の高い商品を一緒に陳列したり、セット販売を行うことで、売上を伸ばすことができるかもしれません。
*   **併売グループ** を分析することで、顧客のニーズをより深く理解し、よりパーソナライズされたマーケティング施策を展開することができるかもしれません。

**追加分析の提案:**

*   **顧客層別の分析:** もし顧客情報があれば、顧客層別に購買データを分析することで、より詳細なインサイトを得ることができます。
*   **時間帯別の分析:** 時間帯別に購買データを分析することで、時間帯ごとのニーズを把握し、適切な商品を提供することができます。
*   **季節変動の分析:** 季節ごとの購買データを分析することで、季節ごとのニーズを把握し、季節限定の商品やキャンペーンを展開することができます。

**注意点:**

*   この分析は、提供されたデータに基づいています。データ量が少ない場合や、データの質が低い場合は、分析結果の信頼性が低下する可能性があります。
*   併売分析は、あくまで参考情報です。最終的なマーケティング戦略の決定は、他の要素も考慮して行う必要があります。
*   データに偏りがある可能性があります(特定の条件で購入されたデータのみが含まれている、など)。

この分析が、貴社のマーケティング戦略の策定に役立つことを願っています。

phi4の場合

全体的に内容が薄く、分析の手順を説明するようなズレた回答をする傾向が目立ちました。

phi4結果例
併売分析は、異なる商品が同じ取引で一緒に購入される頻度を調べることです。これにより、顧客の購買行動やマーケティング戦略を理解するのに役立ちます。提供されたデータから以下の手順で分析します。

### ステップ1: データの整理

まず、購買履歴を見直し、各取引で購入された商品のペアをリスト化します。例えば、「C,S,M,R」の行では、「CとS」「CとM」「CとR」「SとM」「SとR」「MとR」という併売があります。

### ステップ2: 併売ペアのカウント

全ての取引に対して、併売する商品ペアを特定し、それぞれのペアの出現回数をカウントします。この結果は「商品Aと商品Bが一緒に購入された回数」を示します。

### ステップ3: 結果の分析

併売頻度が高いペアを特定し、顧客の関連性や需要パターンを理解します。例えば、多くの人が「TとC」を一緒に購入している場合、これらは商品AとBとして扱われます。

以下はデータから抽出した併売結果の一部です。全てのペアをリスト化するのではなく、頻度が高いものに焦点を当てた例です:

1. **CとS**: よく購入されるペアであり、互いに補完関係がある可能性があります。
2. **TとC**: この組み合わせも頻繁に見られ、多くの顧客が同時に購入しています。
3. **BとY**: 「B」はおそらくステータスやファッションアイテムであり、「Y」は一般的なものと考えられ、多くの人がこの組み合わせを購入しています。

### ステップ4: マーケティング戦略への応用

- **クロスプロモーション**: 併売頻度の高い商品同士は、一緒に宣伝することで販売を促進できます。
- **レコメンデーションエンジン**: オンラインストアでは、購入履歴や関連商品ページに併売頻度の高い商品を表示することで、顧客の滞在時間を延ばし、購買率を上げる可能性があります。

この分析は、商品配置、セールスキャンペーン、レコメンデーションシステムなどに役立ちます。全ての併売ペアをカウントし、それぞれの結果に基づいた戦略を策定することが重要です。

完全な分析を実施するためには、上記の手順をプログラムで自動化するか、専用のアナリティクスツールを使用して効率的に行うことが推奨されます。

まとめ

なかなか興味深い結果を得られたものの、今回のようなデータから有用な結果を得るのは厳しそうです。

商品名や他の参考情報も与えると、また違った結果になるのかもしれませんが、処理可能なデータ量がより少なくなる恐れもありそうです。

ちなみに、今回試したローカルLLMの中では gemma4 が最も優秀そうでした。

  1. ollama上のモデル名です。日本語を使用可能で、ollama上のモデルサイズが9GBくらいまでのものを選んでいます。

  2. 300件程度に削ったcsvデータでも無理でした

  3. 例えば、C,S であれば CS の商品を同時購入している

  4. 調査していないが無限ループの防止策が機能しているのだと推測している

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?