バスケット分析・アソシエーション分析


## バスケット分析
バスケット分析（Market Basket Analysis）は、顧客が一緒に購入する商品のパターンを発見するために使用されるデータマイニング技術です。小売業やECでよく利用され、商品の配置、プロモーション、クロスセリング戦略の最適化などに役立ちます。購入履歴データを基に、「もしAを買うなら、Bも買う可能性が高い」という規則（アソシエーションルール）を見つけ出すことです。

クリックストリームデータやウェブログデータを分析することで、オンライン上での顧客の行動パターンを把握し、パーソナライズされた商品推奨やウェブサイトの最適化に役立てられています。


## 主な指標

| 指標          | 説明                                                                                         |
|---------------|----------------------------------------------------------------------------------------------|
| 支持度 (Support)    | あるアイテムセットがトランザクション全体に占める割合。高い支持度を持つアイテムセットは、頻繁に購入されます。         |
| 確信度 (Confidence) | あるアイテムXを購入したトランザクションのうち、アイテムYも含まれる割合。高い確信度は、ある商品を買ったときに別の商品も買う可能性が高いことを示します。 |
| リフト (Lift)       | アイテムXとYが一緒に購入される確率を、それらが独立して購入される確率の比。リフト値が1より大きい場合、XとYが一緒に購入される傾向があることを意味します。   |

## 指標のベンチマーク値は？

指標（支持度、確信度、リフト）のベンチマーク値は、分析対象となるデータセットやビジネスのコンテキストによって大きく異なります。ただし、一般的なガイドラインを提供することは可能です。

### 支持度 (Support)
- 低い：0.01以下。非常に特定のまたは珍しいアイテムセットであり、全体のトランザクションに対して頻繁に現れません。
- 中程度：0.01～0.1。一定の頻度で現れるアイテムセット。
- 高い：0.1以上。非常に一般的で、頻繁に購入されるアイテムセット。

### 確信度 (Confidence)
- 低い：0.2以下。アイテムXの購入がアイテムYの購入にあまり強い影響を与えない場合。
- 中程度：0.2～0.5。アイテムXの購入がアイテムYの購入に一定の影響を与える場合。
- 高い：0.5以上。アイテムXを購入すると、アイテムYも非常に高い確率で購入される場合。

### リフト (Lift)
- 1より小さい：XとYの購入は独立しており、または負の関連があることを示します。Xを購入するとYの購入確率が下がる。
- 1：XとYの購入は完全に独立しています。
- 1より大きい：XとYが一緒に購入される傾向にあります。リフト値が大きいほど、その関連は強いです。

:::note info
これらの値はスタート地点として考え、特定のビジネスやデータセットのニーズに合わせて調整する必要があります。例えば、非常に大きなデータセットでは、低い支持度のルールでも価値があることがあります。また、リフト値が非常に高い規則は少数である可能性が高いため、中程度のリフト値でも十分に有用なインサイトを提供することがあります。重要なのは、これらの指標を適切なコンテキストで解釈し、ビジネスの意思決定に役立てることです。
:::

## 例


```python

import pandas as pd
from mlxtend.frequent_patterns import apriori, association_rules
from mlxtend.preprocessing import TransactionEncoder

# トランザクションデータの例
transactions = [['牛乳', 'パン'], ['牛乳', 'オムツ', 'ビール', 'パン'], ['パン', 'オムツ'], ['牛乳', 'オムツ', 'ビール']]

# データの準備
encoder = TransactionEncoder()
trans_encoded = encoder.fit(transactions).transform(transactions)
df = pd.DataFrame(trans_encoded, columns=encoder.columns_)

# 頻出アイテムセットの発見
frequent_itemsets = apriori(df, min_support=0.5, use_colnames=True)

# アソシエーションルールの生成
rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.5)

rules

```

出力

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348593/47dee0dc-4771-d716-e1f4-14453cb80980.png)


各項目の説明です。

| 項目                 | 説明                                                                                       |
|---------------------|-------------------------------------------------------------------------------------------|
| antecedents         | 前提となるアイテムセット（ルールの左側）。このアイテムセットが購入された場合、結果（後件）が発生する可能性があります。 |
| consequents         | 結果となるアイテムセット（ルールの右側）。前提のアイテムが購入された際に、これらのアイテムも購入される可能性があります。 |
| antecedent support  | 前提となるアイテムセットがトランザクションデータセット内で見られる頻度。                                         |
| consequent support  | 結果となるアイテムセットがトランザクションデータセット内で見られる頻度。                                         |
| support             | 前提と結果のアイテムセットが同時に発生するトランザクションの割合。                                               |
| confidence          | 前提のアイテムセットが購入されたトランザクションの中で、結果のアイテムセットも購入される条件付き確率。                   |
| lift                | 前提と結果のアイテムセットが独立事象であった場合に比べ、どの程度一緒に購入されるかを示す指標。リフト値が1より大きい場合、アイテム間に正の関連があります。 |
| leverage           | アイテムセットの出現が互いに独立している場合に比べ、前提と結果のアイテムセットが同時に出現する割合の増加量。              |
| conviction         | 前提のアイテムセットが与えられた場合、結果のアイテムセットが発生しない確率。リフト値と同様に、結びつきの強さを示します。   |
| zhangs_metric      | アソシエーションルールの方向性を評価する指標。値が正ならば正の関連、値が負ならば負の関連、0に近い値ならば関連がないことを示します。 |

## AWSでつくるなら...

```mermaid

graph LR
    subgraph A[データ収集とストレージ]
        Kinesis[Amazon Kinesis Data Firehose] --> S3[Amazon S3]
    end

    subgraph B[データ処理と分析]
        S3 --> Glue[AWS Glue] --> Athena[Amazon Athena]
    end

    subgraph C[アソシエーション分析]
        Athena --> SageMaker[Amazon SageMaker]
        SageMaker --> Redshift[Amazon Redshift]
    end

    subgraph D[レコメンデーションの提供]
        Personalize[Amazon Personalize] --> Lambda[AWS Lambda]
        Redshift --> Lambda
    end

    subgraph E[フロントエンド]
        APIGateway[Amazon API Gateway] --> Lambda
        Amplify[AWS Amplify] --> APIGateway
        Amplify --> FrontEnd[フロントエンド UI]
    end

```

1. データ収集とストレージ
Amazon Kinesis Data Firehose: ユーザーの行動データ（閲覧、カート追加、購入など）をリアルタイムで収集し、分析のために処理します。
Amazon S3: 収集したデータを安全に保存します。データは後続の分析プロセスで使用されます。
2. データ処理と分析
AWS Glue: ETL（Extract, Transform, Load）ジョブを使用して、S3から収集したデータを前処理し、分析用の形式に変換します。
Amazon Athena: S3に保存されたデータに対してSQLクエリを実行し、アソシエーション分析のためのデータセットを生成します。
3. アソシエーション分析
Amazon SageMaker: 機械学習モデルをトレーニングしてアソシエーション分析を行います。SageMakerは、カスタムMLモデルの開発、トレーニング、デプロイをサポートします。
Amazon Redshift: 分析結果を高速にクエリするために、アソシエーションルールをRedshiftにロードします。Redshiftは、大規模なデータセットに対して高速な分析クエリを実行できるデータウェアハウスサービスです。
4. レコメンデーションの提供
Amazon Personalize: リアルタイムでパーソナライズされたレコメンデーションを提供します。Amazon Personalizeは、過去の交易データからユーザーの好みを学習し、それに基づいて個々のユーザーに合わせた商品を提案します。
AWS Lambda: レコメンデーションロジックやビジネスルールを実装するためのサーバーレスコンピューティングサービスです。Lambdaを使用して、Personalizeからのレコメンデーションをカスタマイズし、最終的なレコメンデーションリストを生成します。
5. フロントエンドとインテグレーション
Amazon API Gateway: レコメンデーションを提供するバックエンドサービスにアクセスするためのAPIを管理します。
AWS Amplify: モバイルやWebアプリケーションの開発を簡素化します。Amplifyを使用して、ECサイトのフロントエンドを構築し、バックエンドサービスと簡単に統合します。