無料ツールで始めるデータ分析

無料ColabとSheetsで実践!バスケット分析入門:商品間の意外な関連性を見つける

Tags: データ分析, バスケット分析, 併売分析, Google Colab, Google Sheets, Python, 無料ツール

購買データの裏に隠された顧客インサイトを見つける

ビジネスにおいて、顧客がどのような商品を同時に購入するのか、その関連性を理解することは非常に重要です。例えば、ECサイトで商品Aを購入した顧客が、高確率で商品Bも購入していることが分かれば、これらをセットで提案したり、近くに陳列したりすることで、「ついで買い」を促進し、売上向上に繋げることができます。

しかし、このような商品間の「隠れた関連性」を手作業で見つけ出すのは困難です。また、専門的な分析ツールは高価であるため、導入をためらっているという方もいらっしゃるかもしれません。

この記事では、手軽に無料で使えるGoogle SheetsとGoogle Colaboratory(Colab)というツールを組み合わせ、顧客の購買データから商品間の関連性を見つけ出す「バスケット分析(併売分析)」を実践する方法を解説します。特別なプログラミング知識がなくても始められるよう、手順とコード例を分かりやすくご紹介します。

バスケット分析(併売分析)とは

バスケット分析、あるいは併売分析とは、顧客のトランザクション(購買履歴)データを分析し、どの商品がどの商品と一緒に購入される傾向があるかを発見するデータ分析手法です。スーパーマーケットで買い物かご(バスケット)の中に何が入っているかを分析することから、この名前がついています。

この分析から得られる情報は、以下のようなビジネス施策の立案に役立ちます。

バスケット分析は、「アソシエーションルール(Association Rule)」という形式で商品間の関連性を表現します。「XならばYである(If X, then Y)」のようなルールです。例えば、「おむつを購入する顧客はビールも購入する」といったルールが発見されることがあります(これは有名な事例の一つです)。

アソシエーションルールを評価する際には、主に以下の3つの指標が用いられます。

なぜGoogle Sheets + Colab + Pythonで実践するのか

バスケット分析、特に多くのアソシエーションルールを効率的に計算するには、専用のアルゴリズムが必要です。表計算ソフトであるGoogle Sheetsだけでは、これらの複雑な計算を実行することは困難です。

そこで活用するのが、Google Colaboratory(Colab)とPythonというプログラミング環境です。

この組み合わせにより、データの準備はSheetsで手軽に行い、複雑な分析処理はColabとPythonに任せる、という無料かつ実践的なデータ分析フローを実現できます。

バスケット分析の実践手順

ここでは、架空の購買データを使ったバスケット分析の手順を解説します。

ステップ1:データの準備(Google Sheets)

バスケット分析に必要なデータは、「どのトランザクション(購入)で」「どの商品が」購入されたか、という情報です。一般的には、以下のような形式のデータを用意します。

| トランザクションID | 商品ID/商品名 | | :----------------- | :------------ | | T001 | Apple | | T001 | Banana | | T002 | Apple | | T002 | Orange | | T002 | Grape | | T003 | Apple | | T003 | Banana | | T004 | Orange | | T004 | Grape | | T004 | Pear | | T004 | Pineapple |

お手元にこのような購買データ(CSVファイルなど)がある場合は、Google Sheetsにインポートしてください。もしデータ形式が異なる場合は、Sheetsの機能を使ってこの形式に整形します。各行が「あるトランザクションで特定の商品が購入された」という記録に対応します。

整形が完了したら、このデータをCSVファイルとしてエクスポートしておきます(例: transactions.csv)。このファイルは後でColabから読み込みます。

ステップ2:Google Colabでの分析実行(Pythonコード)

次に、Colab上でPythonを使ってバスケット分析を実行します。

  1. Google Colabを開く: ウェブブラウザでGoogle Colaboratoryにアクセスし、新しいノートブックを作成します。
  2. Google Driveをマウント: ColabからSheetsからエクスポートしたCSVファイルを読み込むために、Google Driveをマウントします。以下のコードを実行し、表示される指示に従って認証を行います。

    python from google.colab import drive drive.mount('/content/drive') 3. 必要なライブラリのインストール: バスケット分析にはmlxtendというライブラリが便利です。Colabには多くのライブラリがプリインストールされていますが、もしmlxtendが利用できない場合は、以下のコードでインストールします。

    ```python

    mlxtendがインストールされていない場合のみ実行

    !pip install mlxtend ``` 4. ライブラリのインポートとデータの読み込み: 必要なライブラリをインポートし、Google DriveにアップロードしたCSVファイルを読み込みます。ファイルパスはご自身の環境に合わせて修正してください。

    ```python import pandas as pd from mlxtend.frequent_patterns import apriori, association_rules

    CSVファイルのパスを指定(Google Driveのマイドライブ直下に transactions.csv を置いた場合)

    file_path = '/content/drive/My Drive/transactions.csv' df = pd.read_csv(file_path)

    print("--- 読み込んだデータ(最初の5行) ---") print(df.head()) print("\n") ```

  3. データをバスケット形式に変換: mlxtendライブラリで分析するために、データを「バスケット形式」に変換します。これは、トランザクションIDを行、商品名を列とし、そのトランザクションで商品が購入されたら1、されていなければ0、とする形式(One-Hot Encoding)です。

    ```python

    データをバスケット形式に変換(トランザクションIDを行、商品名を列とするOne-Hot Encoding)

    basket = (df.groupby(['TransactionID', '商品ID/商品名'])['商品ID/商品名'] .count() .unstack() .reset_index() .fillna(0) .set_index('TransactionID'))

    購入数をバイナリ(0または1)に変換

    def encode_units(x): if x <= 0: return 0 if x >= 1: return 1

    basket_sets = basket.applymap(encode_units)

    print("--- バスケット形式データ(最初の5行) ---") print(basket_sets.head()) print("\n") ```

  4. 頻繁なアイテムセットの抽出: aprioriアルゴリズムを使って、頻繁に同時に購入される商品の組み合わせ(Frequent Itemsets)を抽出します。min_supportパラメータで、抽出する組み合わせの最低支持度を指定します。小さすぎると組み合わせが膨大になり、大きすぎると有用な組み合わせが見つかりにくいため、データの特性に合わせて調整が必要です。

    ```python

    頻繁なアイテムセットの抽出(min_supportは適切な値を設定)

    例として、支持度が20%以上の組み合わせを抽出

    frequent_itemsets = apriori(basket_sets, min_support=0.2, use_colnames=True)

    print("--- 頻繁なアイテムセット ---") print(frequent_itemsets) print("\n") ```

  5. アソシエーションルールの生成: 抽出した頻繁なアイテムセットから、アソシエーションルールを生成します。association_rules関数を使用し、どの指標(metric)で、どの閾値(min_threshold)以上のルールを抽出するかを指定します。ここではリフト値(lift)を指標とし、リフト値が1.0以上のルールを抽出する例を示します。

    ```python

    アソシエーションルールの生成(リフト値1.0以上のルールを抽出)

    rules = association_rules(frequent_itemsets, metric="lift", min_threshold=1.0)

    結果をリフト値の高い順にソートして表示

    rules = rules.sort_values(by='lift', ascending=False)

    print("--- 生成されたアソシエーションルール ---") print(rules) ```

ステップ3:結果の活用と可視化(Sheetsなど)

Colabで生成されたルール一覧(pandas DataFrame形式)には、前提となる商品(antecedents)、結果として購入されやすい商品(consequents)、支持度、確信度、リフト値などが含まれています。この結果をCSVファイルとしてエクスポートし、Google Sheetsで確認したり、ビジネスに活用したりします。

# 結果をCSVファイルとしてGoogle Driveに保存
rules.to_csv('/content/drive/My Drive/association_rules.csv', index=False)
print("\n--- ルール一覧を association_rules.csv として保存しました ---")

Sheetsで association_rules.csv を開き、リフト値が高いルールや、ビジネス的に関連付けたい商品を含むルールに注目します。例えば、条件付き書式を使ってリフト値が特定の閾値以上の行を目立たせると、注目すべきルールを見つけやすくなります。

得られたルールを基に、以下のような施策を検討できます。

具体的な分析例のイメージ

上記のサンプルデータでmin_support=0.2min_lift=1.0としてバスケット分析を実行すると、以下のようなルールが得られる可能性があります(データの件数が少ないため、あくまでイメージです)。

例えば、以下のようなルールが見つかったとします。

| antecedents | consequents | support | confidence | lift | | :-------------- | :------------ | :--------- | :---------- | :--------- | | (Banana) | (Apple) | 0.5 | 1.0 | 2.0 | | (Orange, Grape) | (Pineapple) | 0.25 | 1.0 | 4.0 | | (Apple) | (Banana) | 0.5 | 0.667 | 1.333 |

このように、得られたルールをビジネス的な視点で解釈することが重要です。リフト値が高いルールは、単なる偶然ではなく、顧客の購買行動に強い関連性があることを示唆しています。

よくある疑問や注意点

結論:無料ツールでデータ分析の第一歩を踏み出す

この記事では、Google SheetsとGoogle Colaboratory(Colab)、そしてPythonのmlxtendライブラリを使い、無料でバスケット分析(併売分析)を実践する手順を解説しました。

手元にある購買データをSheetsで準備し、Colab上でPythonコードを実行することで、普段見過ごしがちな商品間の関連性を数値として把握することができます。この分析結果は、クロスセル促進、商品陳列の最適化、効果的なプロモーションなど、具体的なビジネス施策の立案に直接繋がります。

まずは少量のサンプルデータや、特定の期間のデータを使って、この記事で紹介した手順を試してみてはいかがでしょうか。データに基づいた意思決定は、ビジネスの成長を加速させるための強力な一歩となります。バスケット分析で得られた知見を、他の顧客分析(RFM分析など)と組み合わせることで、さらに深い顧客理解に繋がる可能性もあります。無料ツールを活用して、データ分析のスキルを磨き、日々の業務に活かしていきましょう。