--- id: wiki-2026-0508-scm-supply-chain-management title: SCM (Supply Chain Management) category: 10_Wiki/Topics status: verified canonical_id: self aliases: [Supply Chain Management, Supply Chain] duplicate_of: none source_trust_level: A confidence_score: 0.9 verification_status: applied tags: [scm, supply-chain, logistics, optimization, operations-research] raw_sources: [] last_reinforced: 2026-05-10 github_commit: pending tech_stack: language: Python framework: OR-Tools / Pyomo --- # SCM (Supply Chain Management) ## 매 한 줄 > **"매 plan → source → make → deliver → return 의 end-to-end flow 최적화"**. 매 SCOR 모델 (1996) 의 frame 위에서 매 ERP/APS (SAP IBP, Oracle, o9, Kinaxis) 가 운영. 매 2020 COVID, 2022 우크라이나, 2024 홍해 등 매 black-swan 연쇄 이후 매 resilience + AI-driven autonomous SCM 이 핵심 의제 (Gartner: 50%+ 기업 by 2026). ## 매 핵심 ### 매 SCOR 5단계 - **Plan**: demand forecast, S&OP, inventory policy. - **Source**: supplier selection, procurement, contracts. - **Make**: production scheduling, MRP, capacity. - **Deliver**: warehousing, transportation, last-mile. - **Return**: reverse logistics, refurb, recycling. ### 매 KPI - **OTIF** (On-Time-In-Full): delivery reliability. - **Cash-to-Cash cycle**: working capital efficiency. - **Forecast accuracy** (MAPE/WAPE). - **Perfect Order Rate**: error-free fulfillment. - **Inventory turnover** = COGS / avg inventory. ### 매 응용 1. Demand forecasting (TFT, N-BEATS, Chronos foundation model). 2. VRP / route optimization (last-mile, mid-mile). 3. Supplier risk monitoring (Resilinc, Everstream). 4. Inventory optimization (multi-echelon, newsvendor). 5. Digital twin of supply network. ## 💻 패턴 ### Demand forecast (Chronos foundation model, 2026) ```python from chronos import ChronosPipeline import torch, pandas as pd pipeline = ChronosPipeline.from_pretrained( "amazon/chronos-bolt-base", torch_dtype=torch.bfloat16 ) history = pd.read_csv("sales.csv")["units"].values forecast = pipeline.predict( context=torch.tensor(history), prediction_length=28, # 28-day horizon num_samples=100, ) # quantile-aware probabilistic ``` ### Multi-echelon inventory (newsvendor + safety stock) ```python from scipy.stats import norm import numpy as np def reorder_point(mu_d, sigma_d, lead_time, service_level=0.95): z = norm.ppf(service_level) mean_lt_demand = mu_d * lead_time sigma_lt = sigma_d * np.sqrt(lead_time) safety_stock = z * sigma_lt return mean_lt_demand + safety_stock, safety_stock rop, ss = reorder_point(mu_d=120, sigma_d=30, lead_time=7) ``` ### VRP (OR-Tools) ```python from ortools.constraint_solver import pywrapcp, routing_enums_pb2 def solve_vrp(distance_matrix, demands, vehicle_capacities, depot=0): mgr = pywrapcp.RoutingIndexManager( len(distance_matrix), len(vehicle_capacities), depot ) routing = pywrapcp.RoutingModel(mgr) def dist_cb(i, j): return distance_matrix[mgr.IndexToNode(i)][mgr.IndexToNode(j)] routing.SetArcCostEvaluatorOfAllVehicles( routing.RegisterTransitCallback(dist_cb) ) def demand_cb(i): return demands[mgr.IndexToNode(i)] routing.AddDimensionWithVehicleCapacity( routing.RegisterUnaryTransitCallback(demand_cb), 0, vehicle_capacities, True, "Capacity" ) params = pywrapcp.DefaultRoutingSearchParameters() params.first_solution_strategy = ( routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC ) return routing.SolveWithParameters(params) ``` ### Supplier risk score (LLM + structured) ```python import anthropic, json client = anthropic.Anthropic() news = fetch_news(supplier="Foxconn Zhengzhou", days=7) resp = client.messages.create( model="claude-opus-4-7", max_tokens=512, messages=[{"role": "user", "content": f""" Score supplier risk 0-100 based on news. Output JSON. News: {news} Schema: {{"score": int, "drivers": [str], "recommended_action": str}} """}], ) risk = json.loads(resp.content[0].text) ``` ### Bullwhip effect simulation ```python # Beer game style — order amplification upstream def bullwhip(retail_demand, smoothing=0.3, levels=4): orders = [retail_demand] for _ in range(levels): prev = orders[-1] next_orders = [prev[0]] for d in prev[1:]: next_orders.append( smoothing * d + (1 - smoothing) * next_orders[-1] + 0.5 * (d - next_orders[-1]) ) orders.append(next_orders) return orders # variance grows upstream ``` ### Digital twin (NetworkX flow) ```python import networkx as nx G = nx.DiGraph() G.add_edge("Supplier_TW", "Port_Kaohsiung", capacity=500, cost=10) G.add_edge("Port_Kaohsiung", "Port_LA", capacity=400, cost=80, lead=14) G.add_edge("Port_LA", "DC_Dallas", capacity=350, cost=20) flow_cost, flow_dict = nx.network_simplex(G, demand={"DC_Dallas": 300, "Supplier_TW": -300}) ``` ## 매 결정 기준 | 상황 | Approach | |---|---| | New SKU, no history | Foundation model (Chronos, TimeGPT) zero-shot | | Mature SKU, seasonal | TFT / Prophet + holiday regressors | | Sub-day routing | OR-Tools VRP / Hexaly | | Supplier disruption | Multi-source + safety stock + risk score | | Network redesign | MILP (Pyomo + Gurobi) | **기본값**: Chronos-bolt forecasting + multi-echelon safety stock + OR-Tools VRP. ## 🔗 Graph - 부모: [[Operations-Research]] - 변형: [[S&OP]] - 응용: [[ERP]] - Adjacent: [[Time-Series-Analysis|Time-Series-Forecasting]] · [[Digital-Twin]] ## 🤖 LLM 활용 **언제**: supplier risk synthesis from news, RFP analysis, procurement copilot, demand sensing from external signals (weather, social). **언제 X**: numerical optimization (VRP, MILP) — use OR solvers, not LLM. ## ❌ 안티패턴 - **Spreadsheet hell**: critical S&OP in Excel without version control. - **Single forecast number**: ignore quantiles → systematic stockouts or overstocks. - **Bullwhip ignored**: each tier optimizes locally, variance amplifies upstream. - **Supplier concentration**: 80% volume from one country/factory. ## 🧪 검증 / 중복 - Verified (APICS SCOR, Gartner Magic Quadrant 2025, MIT CTL research). - 신뢰도 A. ## 🕓 Changelog | 날짜 | 변경 | |---|---| | 2026-05-08 | Phase 1 | | 2026-05-10 | Manual cleanup — SCM SCOR, forecasting, VRP, risk patterns |