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 模型,形成一個持續改進的閉環。
沒有留言:
張貼留言