針對擁有多品類、多種類產品的企業,如何通過數據分析優化產品結構,實現最大化收益和資源分配。

案例背景:製造業企業的產品矩陣分析

某製造企業擁有複雜的產品體系,需要解決:

  • 如何評估各產品線的健康度?
  • 如何優化產品組合實現利潤最大化?
  • 如何分配研發和市場資源?
  • 如何識別明星產品和問題產品?

數據架構設計

多層次產品分類體系

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