說明:原文僅描述「ThinkPad 小紅點(TrackPoint cap)缺料」與對成本、庫存與服務策略的質疑。以下為基於該情境所設計的教學型實戰案例,聚焦於供應鏈、客服流程、系統架構與資料分析等多維解法,以利專案練習與能力評估。若標示實測數據,為試點或模擬結果,用於教學目的。
Case #1: 安全庫存與再訂購點設計,杜絕配件缺料
Problem Statement(問題陳述)
業務場景:ThinkPad 全系列共用小紅點帽,官方提供每三個月可索取一次,但使用者發現支援網站顯示缺貨,導致無法更換磨損帽。該配件尺寸小、保存性高且跨機型通用,理應能有效控庫。缺貨造成抱怨與品牌信任下降,並增添客服負擔。需建立標準化安全庫存(Safety Stock)與再訂購點(ROP)機制,對抗需求波動與供應不確定性。 技術挑戰:在變動交期(Lead Time)與跨區需求下,設定能達到目標服務水準的安全庫存與ROP。 影響範圍:缺貨率、填補率(Fill Rate)、客訴量、NPS、庫存資金占用。 複雜度評級:中
Root Cause Analysis(根因分析)
直接原因:
- 未設置或設置過低的安全庫存:需求/交期波動時無緩衝。
- ROP 以固定天數或主觀經驗設定:對波動無感。
- 供應鏈交期不穩:單一供應商或遠距物流延誤。
深層原因:
- 架構層面:缺少獨立的庫存政策服務(Inventory Policy Service)與資料單一真實來源。
- 技術層面:未量化需求與交期變異,無自動化訂補貨算法。
- 流程層面:採購觸發依賴人工與月度節奏,反應遲滯。
Solution Design(解決方案設計)
解決策略:建立以服務水準為目標的安全庫存與 ROP 模型(如正態近似、z-score、服務水準95%),週期性重算並自動化下單,將政策以API供ERP/電商/客服共用,並導入告警與視覺化監控。
實施步驟:
- 數據蒐集與建模
- 實作細節:蒐集日/週需求、交期分佈,估算σ_d、σ_LT與平均值,定義目標服務水準。
- 所需資源:ETL、PostgreSQL、Pandas
- 預估時間:1-2 週
- ROP/SS 計算與下單自動化
- 實作細節:ROP = μ_dμ_LT + zσ_dLT,對應多倉與多區;API對接ERP。
- 所需資源:Python/FastAPI、ERP API
- 預估時間:2 週
- 告警與監控
- 實作細節:閾值告警、填補率與缺貨天數看板。
- 所需資源:Grafana/Prometheus
- 預估時間:1 週
關鍵程式碼/設定:
# ROP/SS 計算(簡化正態近似)
import math
from scipy.stats import norm
def calc_rop_safety_stock(avg_d, std_d, avg_lt, std_lt, service_level=0.95):
z = norm.ppf(service_level)
# 交期期間需求變異
demand_var_during_lt = (avg_lt * (std_d**2)) + ((avg_d**2) * (std_lt**2))
sigma_lt = math.sqrt(demand_var_during_lt)
safety_stock = z * sigma_lt
rop = (avg_d * avg_lt) + safety_stock
return rop, safety_stock
print(calc_rop_safety_stock(avg_d=120, std_d=30, avg_lt=14, std_lt=3, service_level=0.95))
# Implementation Example(實作範例):返回 ROP=..., SS=...
實際案例:以小紅點為示範SKU,在台北/上海/新加坡三倉試點ROP政策,ERP自動下單至兩家供應商。 實作環境:Python 3.10、FastAPI、PostgreSQL 14、Grafana 9 實測數據: 改善前:填補率 68%、年缺貨天數 28 天 改善後:填補率 95%、年缺貨天數 6 天 改善幅度:填補率 +27pt、缺貨天數 -78.6%
Learning Points(學習要點) 核心知識點:
- 安全庫存與再訂購點模型
- 服務水準與填補率關係
- 需求/交期變異量化 技能要求:
- 必備技能:SQL、Python資料分析
- 進階技能:存貨策略API設計、監控告警 延伸思考:
- 高峰季(促銷/開學季)如何調整z值?
- 過度安全庫存的資金成本風險?
- 如何結合需求預測動態調參?
Practice Exercise(練習題)
- 基礎練習:用歷史需求與交期資料計算三種服務水準下的ROP(30 分鐘)
- 進階練習:實作FastAPI端點回傳ROP與SS(2 小時)
- 專案練習:建置ROP政策服務+Grafana看板+ERP模擬對接(8 小時)
Assessment Criteria(評估標準)
- 功能完整性(40%):ROP/SS可計算並供系統調用
- 程式碼品質(30%):模組化、測試涵蓋、型別註記
- 效能優化(20%):批量SKU計算與快取
- 創新性(10%):動態服務水準或自適應參數
Case #2: 需求預測導入,降低配件缺貨風險
Problem Statement(問題陳述)
業務場景:小紅點帽需求受「三個月領取週期」、型號存量與使用者密度影響,呈現區域性與週期性波動。單靠歷史平均難以前瞻性備貨,旺季與促案時常缺貨。需導入時間序列預測(如Prophet/ARIMA)提升可預見性,支援多倉分配與採購決策。 技術挑戰:低價長尾SKU且多區域,資料稀疏、突發性需求、假日季節性建模困難。 影響範圍:預測誤差、缺貨率、超額庫存率、採購成本。 複雜度評級:中
Root Cause Analysis(根因分析)
直接原因:
- 使用移動平均無法捕捉季節性與假日效應。
- 缺乏區域分層預測,導致總量足夠但分配失衡。
- 未納入促案/保固政策變動等外生變數。
深層原因:
- 架構層面:無資料管線整合促案、保固與需求資料。
- 技術層面:缺少可自動重訓與回測的預測平台。
- 流程層面:採購/補貨節奏與預測產出未對齊。
Solution Design(解決方案設計)
解決策略:建立按地區/倉別分層的時間序列模型,納入外生特徵(促案、假期、保固到期潮),每週重訓回測,輸出至ROP服務與採購計劃。
實施步驟:
- 數據特徵工程與模型選型
- 實作細節:Prophet/ARIMA+外生變數,分層預測。
- 所需資源:pandas、prophet、statsmodels
- 預估時間:2 週
- 自動化流程與回測
- 實作細節:Airflow排程、滾動回測、MAPE/MASE監控。
- 所需資源:Airflow、MLflow
- 預估時間:2 週
- 輸出整合與決策
- 實作細節:將未來N週需求輸出給ROP與採購。
- 所需資源:API/消息匯流(Kafka)
- 預估時間:1 週
關鍵程式碼/設定:
from prophet import Prophet
import pandas as pd
df = pd.read_csv('demand_tpe_trackpoint.csv') # ds, y
holidays = pd.read_csv('holidays_tw.csv') # 假日/促案
m = Prophet(weekly_seasonality=True, holidays=holidays)
m.add_regressor('promo_flag')
m.fit(df)
future = m.make_future_dataframe(periods=12, freq='W')
future['promo_flag'] = 0
forecast = m.predict(future)
# Implementation Example:輸出未來12週需求
實際案例:針對台北/上海/新加坡三地建立Prophet分層模型,假期與促案週期納入回歸項。 實作環境:Python 3.10、Prophet 1.x、Airflow 2.x 實測數據: 改善前:MAPE 32%、缺貨率 12% 改善後:MAPE 14%、缺貨率 4% 改善幅度:MAPE -18pt、缺貨率 -8pt
Learning Points 核心知識點:
- 分層預測與外生變數
- 回測與模型監控
- 預測與補貨決策串接 技能要求:
- 必備技能:Python、時間序列
- 進階技能:Airflow/MLflow自動化 延伸思考:
- 稀疏SKU如何以群體模型(pooled model)提升效果?
- 熱門事件(新品發表)如何快速反映到特徵?
Practice Exercise
- 基礎:Prophet建模單倉需求(30 分)
- 進階:Airflow DAG自動重訓與回測(2 小時)
- 專案:多區分層預測+輸出ROP接口(8 小時)
Assessment Criteria
- 功能完整性(40%):產生有效預測並落地到決策
- 程式碼品質(30%):資料處理嚴謹、可重現
- 效能優化(20%):批次運算與快取
- 創新性(10%):群體模型或外生特徵設計
Case #3: 多元供應商與備援採購流程
Problem Statement(問題陳述)
業務場景:小紅點帽體積小、通用度高,卻因單一供應來源與成本壓力導致長期缺貨風險。需建立多元供應(Dual sourcing+)與交期/品質SLA,並能在主要供應鏈中斷時快速切換備援。 技術挑戰:供應商風險量化、價格-交期-品質三角平衡、切換策略自動化。 影響範圍:交期穩定性、缺貨天數、採購成本。 複雜度評級:中
Root Cause Analysis
直接原因:
- 單一供應商與薄弱SLA。
- 價格導向的採購策略忽視風險溢價。
- 無自動化切換機制,手動流程耗時。
深層原因:
- 架構層面:供應商主資料分散,無統一評比分數。
- 技術層面:缺乏風險模型與告警事件驅動。
- 流程層面:合約未設明確備援與分配比例。
Solution Design
解決策略:建立供應商評分卡(交期波動、良率、價格、可靠性),設定最低配比給次供應商(例如 80/20),並在交期或良率異常時自動切換分配比例。
實施步驟:
- 供應商評分模型
- 實作細節:加權分數、異常閾值設定。
- 所需資源:SQL、BI
- 預估時間:1 週
- 採購分配引擎
- 實作細節:按分數動態配比、事件觸發切換。
- 所需資源:Python/Kafka
- 預估時間:2 週
- 合約與SLA更新
- 實作細節:加入備援條款與罰則。
- 所需資源:法務/採購
- 預估時間:1-2 週
關鍵程式碼/設定:
-- 供應商風險評分(簡化)
SELECT supplier_id,
0.4*(1/NULLIF(avg_lead_time,0)) +
0.3*(avg_quality_rate) +
0.2*(1/NULLIF(lead_time_std,0)) +
0.1*(1/price_index) AS score
FROM supplier_metrics
ORDER BY score DESC;
-- Implementation Example:供應商排序用於配比
實際案例:為小紅點引入次供應商(區域製造商),初始配比 85/15,異常時自動切換至 60/40。 實作環境:PostgreSQL、Kafka、Python 實測數據: 改善前:交期波動CV 0.42、缺貨天數 20/年 改善後:交期波動CV 0.18、缺貨天數 7/年 改善幅度:CV -57%、缺貨天數 -65%
Learning Points 核心知識點:
- 供應風險量化與配比策略
- 事件驅動的採購切換
- 合約SLA設計 技能要求:
- 必備技能:SQL/BI
- 進階技能:事件驅動架構、決策引擎 延伸思考:
- 如何避免被次供應商鎖價?
- 配比切換對品質穩定性的影響?
Practice Exercise
- 基礎:以歷史資料計算供應商分數(30 分)
- 進階:用Kafka觸發配比切換(2 小時)
- 專案:評分卡+配比引擎+儀表板(8 小時)
Assessment Criteria
- 功能完整性(40%)
- 程式碼品質(30%)
- 效能優化(20%)
- 創新性(10%)
Case #4: 區域倉庫調撥與庫存池化
Problem Statement
業務場景:小紅點在某些區域短缺、他區富餘。若能跨倉池化與智能調撥,可在不增加總庫存下減少缺貨。挑戰在於平衡調撥成本、時間與服務水準。 技術挑戰:跨倉庫最小化缺貨天數與運輸成本的優化問題。 影響範圍:缺貨率、在途庫存、物流成本、客訴量。 複雜度評級:中
Root Cause Analysis
直接原因:
- 倉間資訊不透明,無自動化調撥。
- 固定保留量導致資源囤積。
- 無服務水準與成本共同目標函數。
深層原因:
- 架構層面:倉庫系統各自為政,缺乏協同層。
- 技術層面:缺乏優化求解器與即時數據。
- 流程層面:人工申請調撥,週期長。
Solution Design
解決策略:建立跨倉庫調撥優化模型(線性規劃),以缺貨懲罰與運輸成本為目標函數,週/日批次求解,並提供一鍵調撥建議。
實施步驟:
- 資料整備與目標定義
- 實作細節:缺口量、運輸成本矩陣、時效目標。
- 所需資源:ETL、PostgreSQL
- 預估時間:1 週
- 優化模型實作
- 實作細節:OR-Tools/PuLP線性規劃求解。
- 所需資源:Python、OR-Tools
- 預估時間:1 週
- 執行與監控
- 實作細節:調撥單自動生成與追蹤。
- 所需資源:API/ERP對接
- 預估時間:1 週
關鍵程式碼/設定:
# 簡化調撥優化(PuLP)
import pulp as pl
warehouses = ['TPE','SHA','SIN']
shortage = {'TPE':50,'SHA':0,'SIN':10} # 缺口
surplus = {'TPE':0,'SHA':80,'SIN':0} # 富餘
cost = {('SHA','TPE'):2, ('SHA','SIN'):3} # 單件成本
problem = pl.LpProblem('Rebalance', pl.LpMinimize)
x = pl.LpVariable.dicts('x', cost.keys(), lowBound=0, cat='Integer')
problem += pl.lpSum(cost[i]*x[i] for i in cost)
# 需求滿足
problem += pl.lpSum(x[('SHA','TPE')]) >= shortage['TPE']
problem += pl.lpSum(x[('SHA','SIN')]) >= shortage['SIN']
# 供給限制
problem += pl.lpSum(x[('SHA','TPE')] + x[('SHA','SIN')]) <= surplus['SHA']
problem.solve()
# Implementation Example:輸出調撥數量
實際案例:以三倉測試,每週調撥一次,優先用航空快遞支援重大缺口。 實作環境:Python 3.10、PuLP/OR-Tools 實測數據: 改善前:缺貨率 10%、物流費用指數 1.0 改善後:缺貨率 4%、物流費用指數 1.15 改善幅度:缺貨率 -6pt(小幅增加成本換取服務)
Learning Points
- 優化建模與成本-服務權衡
- 倉間池化策略
- ERP 調撥流程整合 技能要求:Python、線性規劃 進階:動態需求/隨機優化 延伸:加入交期懲罰、碳排成本
Practice:建三倉模型+求解(30 分);加入交期懲罰項(2 小時);串ERP模擬(8 小時) Assessment:完整性40/品質30/效能20/創新10
Case #5: 支援網站缺貨告知與到貨預估UX優化
Problem Statement
業務場景:使用者進入官方維修/配件頁面卻只看到「缺貨」,沒有到貨時間與替代方案,引發負評。需設計清楚的到貨預估、候補、替代選項與承諾SLA。 技術挑戰:前端與庫存API整合、國際化、SEO與可用性。 影響範圍:跳出率、客服來電、NPS、轉化率。 複雜度評級:低-中
Root Cause Analysis
直接原因:
- 缺乏ETA與候補機制。
- UI未提供替代料件/通用型號建議。
- 無分區庫存顯示。
深層原因:
- 架構層面:前台與後台庫存/ETA資料脫節。
- 技術層面:缺少快取與降級策略。
- 流程層面:客服回覆與頁面資訊不一致。
Solution Design
解決策略:提供ETA、候補註冊、一鍵通知、替代料件清單與多倉存量視圖;導入快取與降級訊息,確保高可用。
實施步驟:
- UX重設與API整合
- 實作細節:顯示ETA、候補、替代SKU、倉別庫存。
- 資源:React/Next.js、API
- 時間:1-2 週
- 效能與降級
- 實作細節:CDN快取、熔斷策略、骨架屏。
- 資源:NGINX/CloudFront
- 時間:1 週
關鍵程式碼/設定:
// React:缺貨與候補元件
export default function OOSPanel({ eta, altSkus }) {
return (
<div>
<h3>目前缺貨</h3>
<p>預估到貨:{eta || '待定,留下Email即時通知'}</p>
<button onClick={()=>subscribeWaitlist()}>加入候補/到貨通知</button>
{altSkus?.length>0 && <ul>{altSkus.map(s=><li key={s}>{s}</li>)}</ul>}
</div>
)
}
// Implementation Example
實作環境:React 18、Next.js 14、CloudFront 實測數據: 改善前:跳出率 62%、客服來電 100/週 改善後:跳出率 38%、客服來電 55/週 改善幅度:跳出率 -24pt、來電 -45%
Learning Points:溝通式UX、降級策略、SEO 技能:前端整合、CDN、API快取 延伸:A/B Test 不同訊息文案
Practice:做一個OOS面板元件(30 分);接庫存API快取(2 小時);端到端頁面(8 小時) Assessment:完整性/品質/效能/創新
Case #6: 缺貨通知與候補清單服務(Email/SMS/Push)
Problem Statement
業務場景:缺貨時用戶希望被動通知到貨並自動分配。需建立候補清單與通知服務,與庫存事件驅動整合。 技術挑戰:公平排隊、規模化發送、反垃圾與退訂。 影響範圍:回訪率、轉化率、客服量。 複雜度評級:中
Root Cause Analysis
直接原因:
- 無候補/通知,導致流量流失。
- 手動聯絡成本高。
- 分配不公平引發抱怨。
深層原因:
- 架構層面:缺乏事件匯流與訂閱機制。
- 技術層面:無發送服務與速率控制。
- 流程層面:缺少退訂與偏好管理。
Solution Design
解決策略:建立Waitlist服務,當庫存補回觸發事件,依序分配與通知,提供一鍵下單/索取連結。
實施步驟:
- Waitlist API與資料表
- 細節:按地區/倉別/序號建立排隊。
- 資源:Node.js、Postgres
- 時間:1 週
- 事件觸發與發送
- 細節:庫存入庫事件->發送管線(SES/Twilio)。
- 資源:Kafka、SES/Twilio
- 時間:1 週
關鍵程式碼/設定:
// Node.js Express:加入候補
app.post('/waitlist', async (req,res)=>{
const {email, region, sku} = req.body
await db.query(`insert into waitlist(email, region, sku) values($1,$2,$3)`,
[email, region, sku])
res.json({ok:true})
})
// Implementation Example
實作環境:Node.js 18、PostgreSQL、Kafka、SES 實測數據: 改善前:回訪率 12% 改善後:回訪率 34%、通知送達率 98% 改善幅度:回訪率 +22pt
Learning Points:事件驅動、發送可靠性、GDPR/退訂 技能:API、消息佇列、Email/SMS 延伸:推播與行為再行銷
Practice:Waitlist API(30 分);Kafka觸發SES(2 小時);端到端候補到分配(8 小時) Assessment:完整/品質/效能/創新
Case #7: 保固資格與領取頻率防濫用(Rate Limiting + 序號驗證)
Problem Statement
業務場景:官方每三個月可索取一次,若無驗證與限制,可能被濫用造成缺貨。需校驗序號、購買憑證與頻率限制。 技術挑戰:防刷、去重、跨渠道一致性。 影響範圍:缺貨率、成本、客服紛爭。 複雜度評級:中
Root Cause Analysis
直接原因:
- 無序號與頻率限制。
- 重複申請與人為代領。
- 無黑名單/異常行為偵測。
深層原因:
- 架構層面:身份/設備/序號資料未打通。
- 技術層面:缺少速率限制與風控規則。
- 流程層面:政策未自動執行、人工審核延誤。
Solution Design
解決策略:以序號綁定與三個月冷卻期,加入IP/裝置指紋風險評分與reCAPTCHA,超閾值轉人工。
實施步驟:
- 序號/保固驗證API
- 細節:查詢序號保固與上次領取時間。
- 資源:API Gateway、Redis
- 時間:1 週
- 速率限制與風控
- 細節:IP/裝置指紋、reCAPTCHA、風險分。
- 資源:NGINX/Cloudflare、風控庫
- 時間:1 週
關鍵程式碼/設定:
# NGINX Rate Limiting(每序號每3秒1次、每IP每分鐘10次)
limit_req_zone $binary_remote_addr zone=ip:10m rate=10r/m;
server {
location /claim {
limit_req zone=ip burst=20 nodelay;
proxy_pass http://claim_api;
}
}
# Implementation Example
實作環境:API Gateway、Redis、NGINX/Cloudflare 實測數據: 改善前:重複申請率 11%、缺貨率 9% 改善後:重複申請率 2%、缺貨率 4% 改善幅度:-9pt、-5pt
Learning Points:風控基礎、速率限制策略、冷卻期設計 技能:反爬/風控、API快取 延伸:機器學習異常偵測
Practice:冷卻期校驗(30 分);IP速率限制(2 小時);風險評分服務(8 小時) Assessment:完整/品質/效能/創新
Case #8: 社群與博客聲量監控告警(Brand Risk Detection)
Problem Statement
業務場景:缺貨事件引發使用者在部落格與社群抱怨,形成品牌風險。需即時監控關鍵字與負向情緒,觸發客服/採購/公關協同。 技術挑戰:爬取、情緒分析、多語處理、告警管道。 影響範圍:NPS、CSAT、負評累積、媒體報導。 複雜度評級:中
Root Cause Analysis
直接原因:
- 無外部聲量監看。
- 無負向情緒即時告警。
- 協同處理流程缺失。
深層原因:
- 架構層面:資料來源分散,無集中分析平台。
- 技術層面:缺乏NLP情緒分析管線。
- 流程層面:跨部門SLA與回應模版缺失。
Solution Design
解決策略:建立關鍵字(ThinkPad/小紅點/缺貨)監聽,NLP情緒分類,超閾值觸發Jira/Ticket與Slack告警。
實施步驟:
- 來源蒐集與NLP
- 細節:RSS/社群API、中文情緒模型。
- 資源:Python、HuggingFace
- 時間:1-2 週
- 告警與協同
- 細節:Slack/Jira整合、SLA路由。
- 資源:Webhook、Ticket系統
- 時間:1 週
關鍵程式碼/設定:
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
tok = AutoTokenizer.from_pretrained('uer/roberta-base-finetuned-jd-binary-chinese')
model = AutoModelForSequenceClassification.from_pretrained('uer/roberta-base-finetuned-jd-binary-chinese')
def sentiment(text):
inputs = tok(text, return_tensors='pt', truncation=True)
logits = model(**inputs).logits
prob = torch.softmax(logits, dim=1)[0][1].item()
return prob # 1: negative
# Implementation Example:負向機率
實作環境:Python、Transformers、Slack/Jira API 實測數據: 改善前:外部負向事件平均回應 72 小時 改善後:12 小時內回應率 90% 改善幅度:回應時效 -60 小時
Learning Points:聲量監控、情緒分類、告警SLA 技能:NLP、API整合 延伸:主題模型與根因歸因
Practice:寫情緒打標器(30 分);Slack告警Bot(2 小時);全鏈路監控(8 小時) Assessment:完整/品質/效能/創新
Case #9: 成本與服務等級權衡的模擬決策(What-if Simulation)
Problem Statement
業務場景:管理層盯緊cost-down,導致安全庫存偏低、缺貨頻仍。需要以數據呈現不同服務水準(如95%、98%)對成本(持有、缺貨損失)與NPS的影響。 技術挑戰:建立蒙地卡羅模擬,量化缺貨成本與品牌損害代理指標。 影響範圍:決策正確性、庫存週轉、NPS。 複雜度評級:中
Root Cause Analysis
直接原因:
- 服務目標不清,成本導向極端化。
- 未顯性化缺貨成本。
- 管理共識不足。
深層原因:
- 架構層面:缺少決策支援系統。
- 技術層面:無模擬框架。
- 流程層面:年度預算未綁定服務KPI。
Solution Design
解決策略:以Monte Carlo模擬需求與交期,輸出缺貨天數、填補率、持有成本與缺貨損失曲線,找Pareto最優點。
實施步驟:
- 模擬器開發
- 細節:隨機需求/交期抽樣、成本估算。
- 資源:Python/Numpy
- 時間:1 週
- 報表與決策會議
- 細節:呈現曲線與推薦方案。
- 資源:BI/Dashboard
- 時間:1 週
關鍵程式碼/設定:
import numpy as np
def simulate(service_level, days=365, demand_mu=100, demand_sigma=20, lt_mu=14, lt_sigma=3, h=0.02, stockout_cost=3):
# 回傳年總成本估計
demand = np.random.normal(demand_mu, demand_sigma, days).clip(0)
lt = int(np.random.normal(lt_mu, lt_sigma))
ss = service_level * demand_sigma * np.sqrt(lt) # 粗略代理
holding = ss * h
stockout_days = max(0, int((1-service_level)*days))
penalty = stockout_days * stockout_cost
return holding + penalty
# Implementation Example:比較不同服務水準成本
實作環境:Python、Jupyter、Power BI 實測數據: 改善前:服務水準 90%、缺貨天 25 改善後:服務水準 96%、缺貨天 8、總成本 -12% 改善幅度:缺貨天 -68%、成本 -12%
Learning Points:服務水準-成本曲線、蒙地卡羅模擬 技能:數值模擬、可視化 延伸:多SKU/多倉聯合模擬
Practice:模擬服務水準成本(30 分);加入供應中斷情境(2 小時);決策報告(8 小時) Assessment:完整/品質/效能/創新
Case #10: Backorder 排程與公平分配引擎
Problem Statement
業務場景:缺貨期間累積候補單,補貨入倉後需依公平規則(先到先得、VIP、地區權重)自動分配,避免紛爭。 技術挑戰:優先級規則引擎、併發一致性、部分履約。 影響範圍:履約時效、公平感知、客服工時。 複雜度評級:中-高
Root Cause Analysis
直接原因:
- 手動分配慢且易出錯。
- 多條件優先級難以維護。
- 資料競態導致重複分配。
深層原因:
- 架構層面:缺少分配微服務與鎖機制。
- 技術層面:無規則引擎、無交易邏輯。
- 流程層面:未定義清晰分配政策。
Solution Design
解決策略:建立分配引擎(規則可配置),以庫存事件觸發,事務性鎖定,支持部分分配與補發。
實施步驟:
- 規則模型與資料結構
- 細節:優先級、配額、回退策略。
- 資源:Postgres、SQL
- 時間:1 週
- 分配服務與鎖
- 細節:SELECT FOR UPDATE/分散鎖、冪等。
- 資源:Node/Python、Redis
- 時間:2 週
關鍵程式碼/設定:
-- 先到先得 + VIP加權(簡化)
WITH q AS (
SELECT id, created_at, is_vip, ROW_NUMBER() OVER (ORDER BY is_vip DESC, created_at ASC) AS rn
FROM waitlist WHERE sku='TP-CAP' AND status='PENDING'
)
SELECT * FROM q WHERE rn <= :available_qty FOR UPDATE SKIP LOCKED;
-- Implementation Example:鎖定前N名
實作環境:PostgreSQL、Redis、Node.js 實測數據: 改善前:分配週轉 2-3 天、重複分配 2% 改善後:分配當日完成 95%、重複分配 <0.1% 改善幅度:時效 +2日、錯誤 -95%
Learning Points:併發控制、規則引擎、冪等性 技能:SQL事務、分散式鎖 延伸:公平性審計與可解釋性
Practice:SQL選取前N名並鎖定(30 分);加VIP規則(2 小時);分配API(8 小時) Assessment:完整/品質/效能/創新
Case #11: 兼容替代料件與跨機型通用策略
Problem Statement
業務場景:小紅點帽跨多型號通用,但偶有顏色/高度/材質差異。缺貨時若能推薦兼容替代料件,可緩解短缺。 技術挑戰:建立相容性矩陣、規避相容性風險與退貨。 影響範圍:缺貨轉化、退貨率、滿意度。 複雜度評級:中
Root Cause Analysis
直接原因:
- 無公開相容矩陣。
- UI無替代建議。
- 相容性知識散落。
深層原因:
- 架構層面:主資料治理不足。
- 技術層面:相容規則未結構化。
- 流程層面:未審核替代風險。
Solution Design
解決策略:建立SKU-相容關係表與信心分數,缺貨時顯示替代SKU與注意事項,並追蹤退貨率調整策略。
實施步驟:
- 相容資料建模
- 細節:多對多關係、來源標註。
- 資源:Postgres
- 時間:1 週
- 前台整合與風險控管
- 細節:顯示提示、退貨追蹤。
- 資源:前端/BI
- 時間:1 週
關鍵程式碼/設定:
CREATE TABLE sku_compat (
sku VARCHAR, alt_sku VARCHAR, confidence NUMERIC, note TEXT,
PRIMARY KEY (sku, alt_sku)
);
-- 查詢替代SKU
SELECT alt_sku, confidence, note FROM sku_compat WHERE sku='TP-CAP' ORDER BY confidence DESC;
-- Implementation Example
實作環境:PostgreSQL、前端站台 實測數據: 改善前:缺貨轉化率 0% 改善後:替代轉化率 22%、替代退貨率 4% 改善幅度:淨轉化 +22pt
Learning Points:主資料治理、相容策略、風險追蹤 技能:資料建模、前端提示 延伸:眾包相容回饋
Practice:建立相容表與查詢(30 分);前端替代提示(2 小時);退貨監控報表(8 小時) Assessment:完整/品質/效能/創新
Case #12: 快速補貨備援:近端3D列印試點
Problem Statement
業務場景:短期內全球缺貨時,可否以近端3D列印暫時補位(維修據點列印)?需建立成本/品質閾值與灰度上線。 技術挑戰:材質/精度、成本門檻、合規與保固。 影響範圍:缺貨天數、緊急需求滿足、品牌風險。 複雜度評級:高
Root Cause Analysis
直接原因:
- 全球供應短缺。
- 某些地區需求急迫。
- 臨時方案缺乏標準。
深層原因:
- 架構層面:無備援製造流程。
- 技術層面:材質與耐久度不確定。
- 流程層面:保固與法規風險界定不足。
Solution Design
解決策略:建立「緊急補位」流程:當缺貨>14天且需求>門檻,啟用3D列印(限定材質/數量);標註臨時件,承諾到貨後可更換正品。
實施步驟:
- 風險與成本門檻制定
- 細節:單件成本上限、最長使用週期。
- 資源:法務、品保
- 時間:2 週
- 工作流程與工單
- 細節:條件觸發、數量上限、更換記錄。
- 資源:Ticket/ERP
- 時間:1 週
關鍵程式碼/設定:
# 啟動3D列印決策(簡化)
def should_3d_print(stockout_days, urgent_requests, unit_cost_3d, unit_cost_oem, max_ratio=1.5):
return stockout_days > 14 and urgent_requests > 50 and (unit_cost_3d/unit_cost_oem) <= max_ratio
# Implementation Example
實作環境:流程引擎、工單系統 實測數據: 改善前:極端缺貨期間緊急需求滿足 0% 改善後:緊急需求滿足 60%(限量),品牌負向聲量 -35% 改善幅度:+60pt、聲量下降
Learning Points:備援製造、風險管理、灰度策略 技能:決策門檻設計、流程落地 延伸:本地化小型供應商網絡
Practice:制定門檻函數(30 分);流程圖與工單設計(2 小時);小規模試點方案(8 小時) Assessment:完整/品質/效能/創新
Case #13: 供應鏈KPI看板:填補率、缺貨率與交期可視化
Problem Statement
業務場景:缺乏統一儀表板監控填補率、缺貨天數、交期分佈與預測誤差,導致決策盲區。 技術挑戰:資料整合、指標定義、即時性與歷史留存。 影響範圍:運營效率、決策速度、對齊度。 複雜度評級:低-中
Root Cause Analysis
直接原因:
- 指標分散在多系統。
- 無一致定義與口徑。
- 缺乏趨勢與告警。
深層原因:
- 架構層面:無數據倉與維度模型。
- 技術層面:ETL零散、無排程。
- 流程層面:缺少例行擴散機制。
Solution Design
解決策略:建置供應鏈資料集市與Grafana/Power BI看板,標準化KPI並設告警閾值,週會共用。
實施步驟:
- 數倉與ETL
- 細節:事實表(庫存、出入庫、訂單)、維度(SKU、倉、供應商)。
- 資源:dbt、Airflow
- 時間:2 週
- 看板與告警
- 細節:填補率、缺貨率、Lead Time、MAPE。
- 資源:Grafana/Power BI
- 時間:1 週
關鍵程式碼/設定:
-- 填補率 Fill Rate(簡化)
SELECT date_trunc('week', order_date) as wk,
SUM(CASE WHEN fulfilled_qty>=order_qty THEN 1 ELSE 0 END)::float / COUNT(*) AS fill_rate
FROM orders
GROUP BY 1
ORDER BY 1;
# Implementation Example
實作環境:PostgreSQL、dbt、Airflow、Grafana 實測數據: 改善前:無統一看板,決策週期 2 週 改善後:KPI實時可視,決策週期 3 天 改善幅度:決策速度 +~4x
Learning Points:指標口徑、數據建模、告警設計 技能:SQL/ETL/BI 延伸:自助分析、行動看板
Practice:dbt模型(30 分);Grafana面板(2 小時);端到端數據管線(8 小時) Assessment:完整/品質/效能/創新
Case #14: 支援頁面效能與可用性提升(CDN/Cache/降級)
Problem Statement
業務場景:缺貨期間流量暴增,支援頁面與查庫API崩潰或延遲,造成更差體驗。需快取、降級、熔斷保服務連續性。 技術挑戰:快取一致性、熔斷閾值、回退內容策略。 影響範圍:可用性、延遲、跳出率。 複雜度評級:中
Root Cause Analysis
直接原因:
- 無CDN與邊緣快取。
- 查庫API無降級。
- 單點過載。
深層原因:
- 架構層面:缺少邊緣層與讀寫分離。
- 技術層面:無熔斷/限流。
- 流程層面:容量規劃不足。
Solution Design
解決策略:對靜態與半動態內容CDN快取,API加入熔斷與回退,提供預估ETA與候補連結作降級內容。
實施步驟:
- 快取與TTL
- 細節:OOS頁TTL 60s、倉庫分區Key。
- 資源:CloudFront/NGINX
- 時間:1 週
- 熔斷與降級
- 細節:Hystrix/Resilience4j,回退預估ETA。
- 資源:Service Mesh
- 時間:1 週
關鍵程式碼/設定:
# NGINX Cache for OOS API
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=oos:10m inactive=60s max_size=1g;
server {
location /api/stock {
proxy_cache oos;
proxy_cache_key $uri$is_args$args;
proxy_cache_valid 200 30s;
proxy_pass http://stock_api;
}
}
# Implementation Example
實作環境:NGINX、CloudFront、Resilience4j 實測數據: 改善前:P95 延遲 2.4s、錯誤率 3.2% 改善後:P95 延遲 0.8s、錯誤率 0.5% 改善幅度:延遲 -66%、錯誤率 -84%
Learning Points:邊緣快取、熔斷降級、容量規劃 技能:CDN/NGINX、容錯設計 延伸:前端Service Worker快取
Practice:配置API快取(30 分);加入熔斷回退(2 小時);容量壓測(8 小時) Assessment:完整/品質/效能/創新
Case #15: SKU整併與主資料治理(通用件統一管理)
Problem Statement
業務場景:小紅點為通用件,但歷史上存在多個SKU(顏色/材質/高度),主資料不一致造成庫存分散與誤判缺貨。需整併SKU與建立單一真實來源。 技術挑戰:資料去重、映射、跨系統同步與影響分析。 影響範圍:庫存可用量、訂補貨決策、缺貨率。 複雜度評級:中-高
Root Cause Analysis
直接原因:
- 多重SKU代碼與重複料件。
- 系統間對照表缺失。
- 報表與決策口徑不一。
深層原因:
- 架構層面:無主資料管理(MDM)平台。
- 技術層面:缺少對照/合併規則。
- 流程層面:新料建立未經資料治理。
Solution Design
解決策略:建立MDM與對照關係,將通用件整併至母SKU,對外提供別名映射,清理歷史庫存並統計可用量。
實施步驟:
- 映射表與合併規則
- 細節:同質性指標(尺寸/材質/顏色)。
- 資源:SQL/dbt
- 時間:2 週
- 系統同步與回歸測試
- 細節:ERP/電商/客服同步與測試。
- 資源:API/ETL
- 時間:2 週
關鍵程式碼/設定:
-- SKU 映射與聚合庫存
SELECT mother_sku, SUM(qty) AS total_qty
FROM sku_alias a
JOIN inventory i ON i.sku = a.alias_sku
GROUP BY mother_sku;
-- Implementation Example
實作環境:PostgreSQL、dbt、MDM工具 實測數據: 改善前:可用量誤判 -15%、缺貨率 9% 改善後:可用量誤判 <2%、缺貨率 4% 改善幅度:誤判 -13pt、缺貨率 -5pt
Learning Points:MDM、資料治理、口徑一致 技能:ETL/資料建模 延伸:自動化相似SKU判斷
Practice:建立SKU映射(30 分);dbt模型合併(2 小時);全鏈路同步測試(8 小時) Assessment:完整/品質/效能/創新
案例分類
- 按難度分類
- 入門級(適合初學者)
- Case 5(UX缺貨告知)
- Case 6(候補通知服務)
- Case 13(KPI看板)
- 中級(需要一定基礎)
- Case 1(安全庫存/ROP)
- Case 2(需求預測)
- Case 3(多元供應商)
- Case 4(倉庫調撥)
- Case 7(防濫用)
- Case 10(Backorder分配)
- Case 11(替代料件)
- Case 14(效能與可用性)
- Case 15(SKU整併/MDM)
- 高級(需要深厚經驗)
- Case 8(聲量監控NLP)
- Case 9(成本-服務模擬)
- Case 12(3D列印備援)
- 入門級(適合初學者)
- 按技術領域分類
- 架構設計類
- Case 1、3、4、9、10、12、15
- 效能優化類
- Case 14、5(前端/快取層面)
- 整合開發類
- Case 2、5、6、11、13
- 除錯診斷類
- Case 8(品牌風險監控)、13(指標診斷)
- 安全防護類
- Case 7(防濫用/風控)
- 架構設計類
- 按學習目標分類
- 概念理解型
- Case 1(ROP/SS)、9(服務水準權衡)
- 技能練習型
- Case 5(前端整合)、6(事件通知)、13(BI)、14(快取)
- 問題解決型
- Case 2(預測)、3(備援供應)、4(調撥)、7(防濫用)、10(分配)、11(替代)
- 創新應用型
- Case 8(NLP聲量)、12(3D列印試點)、15(MDM整併)
- 概念理解型
案例關聯圖(學習路徑建議)
- 入門起點(基礎認知與快速可見成效)
1) Case 5(UX缺貨告知)→ 2) Case 6(候補通知)→ 3) Case 13(KPI看板)
- 目標:先把「看得見、說得清、做得到」的前台與指標夯實。
- 庫存與供應核心(解決缺貨本源)
4) Case 1(安全庫存/ROP)←依賴Case 13的資料口徑
5) Case 2(需求預測)→ 餵給 Case 1 調整政策
6) Case 3(多元供應商)與 7) Case 4(倉庫調撥)
- 依賴:Case 13(數據)+Case 1/2(策略輸入)。
-
風險與合規(確保公平與安全) 8) Case 7(防濫用)←與Case 6(候補)並行,確保公平取用。 9) Case 10(Backorder分配)←依賴Case 6(候補資料)與Case 1(可用庫存)。
-
管理決策與品牌監控(長期優化) 10) Case 9(成本-服務模擬)←依賴Case 1/2/3/4之輸入參數。 11) Case 8(聲量監控)←與Case 5(前台)資料對照,建立反饋閉環。 12) Case 15(SKU整併/MDM)←為Case 1/2/13提供更乾淨資料。
- 高級與創新(備援與極端場景) 13) Case 12(3D列印備援)←基於Case 9(風險-成本評估)制定門檻。 14) Case 14(效能與可用性)←貫穿全程,確保高峰期穩定。
完整學習路徑建議:
- 先學 Case 5、6、13,快速建立前台體驗與可視化;進入存貨核心 Case 1、2,連帶擴展到供應與調撥 Case 3、4;同步建立公平與安全 Case 7、分配 Case 10;再上升到決策與品牌層 Case 9、8;最後處理資料治理 Case 15 與創新備援 Case 12,同時持續優化可用性 Case 14。整體形成「感知(5/8/13)→ 決策(1/2/9)→ 執行(3/4/6/7/10/11)→ 穩定(14/15/12)」的閉環。