針對擁有多品類、多種類產品的企業,如何通過數據分析優化產品結構,實現最大化收益和資源分配。
案例背景:製造業企業的產品矩陣分析
某製造企業擁有複雜的產品體系,需要解決:
- 如何評估各產品線的健康度?
- 如何優化產品組合實現利潤最大化?
- 如何分配研發和市場資源?
- 如何識別明星產品和問題產品?
數據架構設計
多層次產品分類體系
python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from datetime import datetime
import warnings
warnings.filterwarnings('ignore')
# 設置中文字體
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成多層次產品數據
np.random.seed(42)
n_products = 5000
# 定義產品層級結構
product_hierarchy = {
'業務單元': ['工業設備', '消費電子', '醫療設備', '汽車零部件', '智能家居'],
'產品線': {
'工業設備': ['重型機械', '自動化設備', '檢測儀器', '動力系統'],
'消費電子': ['智能手機', '筆記本電腦', '智能穿戴', '影音設備'],
'醫療設備': ['影像設備', '監護儀器', '診斷設備', '治療設備'],
'汽車零部件': ['發動機系統', '底盤系統', '電子系統', '內飾系統'],
'智能家居': ['安防監控', '環境控制', '娛樂系統', '廚房電器']
},
'產品類別': {
'重型機械': ['挖掘機', '裝載機', '起重機', '推土機'],
'智能手機': ['旗艦機', '中端機', '入門機', '摺疊屏'],
'影像設備': ['CT掃描儀', 'MRI設備', 'X光機', '超聲設備']
# ... 其他產品線的具體分類
}
}
# 生成產品主數據
products = []
for unit in product_hierarchy['業務單元']:
for line in product_hierarchy['產品線'][unit]:
# 為每個產品線生成多個產品
n_line_products = np.random.randint(20, 100)
for i in range(n_line_products):
product_id = f"P{len(products)+1:04d}"
category_options = product_hierarchy['產品類別'].get(line, [f'{line}_標準型', f'{line}_專業型', f'{line}_經濟型'])
category = np.random.choice(category_options)
products.append({
'product_id': product_id,
'business_unit': unit,
'product_line': line,
'product_category': category,
'product_name': f"{category}_{i+1}",
'launch_date': datetime(2020 + np.random.randint(0, 4),
np.random.randint(1, 13),
np.random.randint(1, 28)),
'cost_price': np.random.lognormal(7, 1.2),
'target_margin': np.random.uniform(0.1, 0.4)
})
products_df = pd.DataFrame(products)
products_df['sales_price'] = products_df['cost_price'] * (1 + products_df['target_margin'])
print("產品主數據概覽:")
print(f"總產品數量: {len(products_df)}")
print(f"業務單元: {products_df['business_unit'].nunique()}個")
print(f"產品線: {products_df['product_line'].nunique()}個")
print(f"產品類別: {products_df['product_category'].nunique()}個")
display(products_df.head())
生成銷售交易數據
python
# 生成銷售數據
n_transactions = 50000
sales_data = []
for _ in range(n_transactions):
product = products_df.sample(1).iloc[0]
order_date = datetime(2023, np.random.randint(1, 13), np.random.randint(1, 28))
sales_data.append({
'order_id': f"ORDER{10000 + _}",
'order_date': order_date,
'product_id': product['produc