2025年6月25日 星期三

AI聊AI2026.2.25---超市引進暢銷熱門商品創建設計AI Agent (人工智慧代理人)程式碼範例

 AI聊AI2026.2.25---超市引進暢銷熱門商品創建設計AI Agent (人工智慧代理人)程式碼範例





Q:超市引進暢銷熱門商品創建設計AI Agent (人工智慧代理人)程式碼範例

AI:



超市引進暢銷熱門商品並創建AI Agent,這是一個結合了市場分析、預測和自動化選品的好應用。以下我將提供一個簡化的 **Python 程式碼範例**,這個範例將涵蓋幾個核心概念:

  * **資料收集與預處理 (Simulated Data)**

  * **商品熱門度分析 (簡單演算法)**

  * **AI Agent 決策邏輯**


AI Agent 程式碼範例:超市熱銷商品推薦

這個範例會模擬一個 AI Agent 的行為,它會根據商品的「銷售數據」和「季節性」來判斷哪些商品是熱銷潛力股。


```python

import pandas as pd

from datetime import datetime, timedelta

import random


# --- 1. 模擬資料收集與預處理 ---

# 實際應用中,這些數據會從資料庫、POS 系統、或外部API獲取


def generate_simulated_sales_data(num_products=50, num_days=180):

    """

    生成模擬銷售數據

    每個商品有基底銷售量,並隨機波動,某些商品模擬季節性熱銷

    """

    data = []

    products = [f"商品_{i:03d}" for i in range(num_products)]

    categories = ["食品", "飲料", "日用品", "美妝", "生鮮"]

    

    start_date = datetime.now() - timedelta(days=num_days)


    for product_id in products:

        base_sales = random.randint(10, 100) # 每個商品的基底銷售量

        category = random.choice(categories)

        is_seasonal = random.choice([True, False]) # 是否為季節性商品

        seasonal_peak_month = random.randint(1, 12) if is_seasonal else None


        for i in range(num_days):

            current_date = start_date + timedelta(days=i)

            sales_volume = base_sales + random.randint(-5, 15) # 隨機波動


            # 模擬季節性商品在特定月份銷售量增加

            if is_seasonal and current_date.month == seasonal_peak_month:

                sales_volume += random.randint(20, 50) 

            

            # 確保銷售量不為負

            sales_volume = max(0, sales_volume) 


            data.append({

                "日期": current_date,

                "商品ID": product_id,

                "商品類別": category,

                "銷售量": sales_volume,

                "價格": round(random.uniform(10, 500), 2)

            })

    

    df = pd.DataFrame(data)

    return df


# 生成模擬數據

print("--- 生成模擬銷售數據中 ---")

sales_data = generate_simulated_sales_data(num_products=100, num_days=365)

print(f"模擬數據生成完成,共 {len(sales_data)} 筆資料。")

# print(sales_data.head()) # 查看前幾行數據

print("-" * 30)


# --- 2. 商品熱門度分析與 AI Agent 決策邏輯 ---


class SupermarketAIAgent:

    def __init__(self, sales_df, lookback_days=90, threshold_factor=1.5):

        """

        初始化 AI Agent

        :param sales_df: 銷售數據 DataFrame

        :param lookback_days: 回溯分析的天數,用於計算平均銷售量

        :param threshold_factor: 熱銷判斷閾值因子 (例如,超過平均銷售量1.5倍即視為熱銷)

        """

        self.sales_df = sales_df

        self.lookback_days = lookback_days

        self.threshold_factor = threshold_factor

        self.current_date = sales_df['日期'].max() # 假設最新數據日期為當前日期


    def analyze_product_performance(self):

        """

        分析商品的銷售表現,計算平均銷售量和近期銷售趨勢。

        """

        # 過濾出在回溯期內的數據

        start_date = self.current_date - timedelta(days=self.lookback_days)

        recent_sales = self.sales_df[self.sales_df['日期'] >= start_date]


        # 計算每個商品的總銷售量和平均銷售量

        product_summary = recent_sales.groupby('商品ID').agg(

            total_sales=('銷售量', 'sum'),

            average_daily_sales=('銷售量', lambda x: x.sum() / self.lookback_days)

        ).reset_index()


        # 添加商品類別 (從原始數據中獲取)

        product_info = self.sales_df[['商品ID', '商品類別']].drop_duplicates()

        product_summary = pd.merge(product_summary, product_info, on='商品ID', how='left')


        return product_summary


    def identify_bestsellers(self):

        """

        識別潛在的熱銷商品。

        熱銷條件:

        1. 近期平均銷售量顯著高於所有商品的平均銷售量。

        2. 考慮趨勢:例如,近7天銷售量相較於過去30天是否有顯著增長。

        """

        product_performance = self.analyze_product_performance()


        if product_performance.empty:

            print("無足夠的商品銷售數據進行分析。")

            return pd.DataFrame()


        # 計算所有商品的平均銷售量

        overall_average_sales = product_performance['average_daily_sales'].mean()


        # 找出近期銷售量顯著高於平均的商品

        bestseller_candidates = product_performance[

            product_performance['average_daily_sales'] > (overall_average_sales * self.threshold_factor)

        ].copy() # 使用 .copy() 避免 SettingWithCopyWarning


        # --- 進階:考慮近期銷售趨勢 (這裡簡化,實際應用可使用線性回歸等模型) ---

        # 這裡我們計算一個簡單的近期增長率:(近7天總銷售 - 近30天總銷售) / 近30天總銷售

        

        # 獲取近7天和近30天數據

        seven_days_ago = self.current_date - timedelta(days=7)

        thirty_days_ago = self.current_date - timedelta(days=30)


        recent_7_days_sales = self.sales_df[self.sales_df['日期'] >= seven_days_ago]

        recent_30_days_sales = self.sales_df[self.sales_df['日期'] >= thirty_days_ago]


        sales_7_day_sum = recent_7_days_sales.groupby('商品ID')['銷售量'].sum().reset_index()

        sales_30_day_sum = recent_30_days_sales.groupby('商品ID')['銷售量'].sum().reset_index()


        # 合併數據並計算增長率

        merged_sales = pd.merge(sales_30_day_sum, sales_7_day_sum, on='商品ID', how='left', suffixes=('_30d', '_7d'))

        merged_sales['銷售增長率'] = ((merged_sales['銷售量_7d'] / 7) - (merged_sales['銷售量_30d'] / 30)) / (merged_sales['銷售量_30d'] / 30)

        

        # 將增長率資訊合併到暢銷候選商品中

        bestseller_candidates = pd.merge(bestseller_candidates, merged_sales[['商品ID', '銷售增長率']], on='商品ID', how='left')

        bestseller_candidates['銷售增長率'] = bestseller_candidates['銷售增長率'].fillna(0) # 無數據則填充0


        # 可以進一步篩選:增長率為正的商品

        final_bestsellers = bestseller_candidates[bestseller_candidates['銷售增長率'] > 0.05].sort_values(

            by=['average_daily_sales', '銷售增長率'], ascending=False

        )


        return final_bestsellers


    def recommend_products(self, top_n=5):

        """

        根據分析結果,推薦前N個熱銷商品。

        """

        bestsellers = self.identify_bestsellers()

        if bestsellers.empty:

            print("目前沒有偵測到明顯的熱銷商品。")

            return []


        print(f"\n--- 推薦前 {top_n} 個熱銷商品 ---")

        for i, row in bestsellers.head(top_n).iterrows():

            print(f"商品ID: {row['商品ID']} | 類別: {row['商品類別']} | 近期日均銷售: {row['average_daily_sales']:.2f} | 銷售增長率: {row['銷售增長率']:.2%}")

        

        return bestsellers.head(top_n)['商品ID'].tolist()


    def generate_acquisition_plan(self, recommended_product_ids):

        """

        根據推薦的商品生成採購或引進計畫。

        這部分可以進一步擴展,例如考量供應商、庫存、利潤等。

        """

        if not recommended_product_ids:

            print("\n無需生成引進計畫,因為沒有推薦商品。")

            return


        print("\n--- 建議引進/加強採購計畫 ---")

        for product_id in recommended_product_ids:

            # 這裡可以根據商品ID查詢更詳細的資訊,例如歷史供應商、成本等

            print(f"建議:考慮引進或增加 {product_id} 的採購量,以滿足市場需求。")

            # 實際應用中,可以生成採購訂單草稿,或向採購部門發送通知。


# --- 運行 AI Agent ---

print("--- AI Agent 開始分析 ---")

ai_agent = SupermarketAIAgent(sales_data, lookback_days=90, threshold_factor=1.2) # threshold_factor 可以調整

recommended_ids = ai_agent.recommend_products(top_n=10) # 推薦前10個

ai_agent.generate_acquisition_plan(recommended_ids)


print("\n--- AI Agent 分析結束 ---")

```


程式碼說明與擴展建議

程式碼組成

1.  **模擬資料收集與預處理 `generate_simulated_sales_data()`**:


      * **目的**:在沒有實際超市數據的情況下,生成一個模擬的銷售數據集。

      * **實際應用**:你需要連接到超市的 **POS 系統 (Point-of-Sale)**、**ERP 系統 (Enterprise Resource Planning)**、或 **供應商資料庫** 來獲取真實的銷售、庫存、商品資訊等。數據清洗和格式化是關鍵步驟。


2.  **`SupermarketAIAgent` 類別**:


      * **初始化 (`__init__`)**:接收銷售數據、回溯分析天數 (`lookback_days`) 和熱銷判斷閾值因子 (`threshold_factor`)。

      * **`analyze_product_performance()` (商品表現分析)**:

          * 計算每個商品在指定回溯期內的 **總銷售量** 和 **平均每日銷售量**。

          * 這是一個基礎的銷售趨勢分析。

      * **`identify_bestsellers()` (識別熱銷商品)**:

          * 這是 AI Agent 的 **核心決策邏輯**。

          * **基礎判斷**:將商品的平均銷售量與所有商品的平均銷售量進行比較,如果超過一個閾值(例如1.2倍),則認為是潛在熱銷商品。

          * **趨勢判斷 (簡化版)**:進一步考慮了近期銷售量的增長率,確保推薦的不是曇花一現,而是持續上升的商品。

          * **實際應用**:這部分可以引入更複雜的 **機器學習模型**,例如:

              * **時間序列預測模型** (如 ARIMA, Prophet, LSTM) 來預測未來的銷售量。

              * **分類模型** (如 Logistic Regression, Random Forest) 來判斷商品是否會成為暢銷品。

              * **推薦系統** (如協同過濾、內容推薦) 來發現商品之間的關聯性。

      * **`recommend_products()` (推薦商品)**:根據識別出的熱銷商品,輸出推薦列表。

      * **`generate_acquisition_plan()` (生成引進計畫)**:根據推薦的商品,模擬生成引進或加強採購的建議。這部分是將 AI 分析結果轉化為 **可執行動作** 的關鍵。


AI Agent 擴展建議

這個範例只是一個起點,要建立一個真正強大且實用的 AI Agent,你需要考慮更多方面:

1.  **更豐富的數據源**:

      * **商品成本與利潤**:哪些熱銷商品利潤高?

      * **庫存數據**:避免推薦已缺貨或庫存過高的商品。

      * **供應鏈資訊**:供應商的穩定性、交貨時間、最低訂購量。

      * **外部數據**:天氣、節假日、新聞事件、社交媒體熱度 (例如,某款飲料因網路挑戰爆紅)。

      * **競品分析**:競爭對手最近引進了哪些商品?銷售如何?


2.  **更複雜的熱銷判斷模型**:

      * **機器學習預測**:使用歷史數據訓練模型,預測未來X天的銷售量。

      * **異常檢測**:識別銷售量的突然飆升 (可能是熱銷或促銷活動效果)。

      * **季節性與趨勢分解**:精確分析商品的季節性週期和長期銷售趨勢。

      * **商品關聯性分析**:發現「買了A的也會買B」的組合,有助於搭配引進。


3.  **自動化與整合**:

      * **與現有系統整合**:將 AI Agent 的輸出直接對接到採購系統、庫存管理系統,甚至自動生成採購訂單草稿。

      * **排程運行**:設定 AI Agent 定期(例如每天、每週)運行,並自動發送報告或警示。

      * **使用者介面 (UI)**:開發一個友善的介面,讓超市管理者可以輕鬆查看推薦結果、調整參數,甚至手動覆蓋 AI 的決策。


4.  **效益評估與回饋循環**:

      * **跟蹤推薦商品的實際銷售表現**:評估 AI Agent 推薦的準確性和帶來的收益。

      * **模型迭代優化**:根據實際表現,不斷調整和優化 AI 模型,形成一個持續改進的閉環。



沒有留言:

張貼留言