拓冰建站拓冰建站
首页 / 资讯中心 / 正文

基于MPC与混合模型的蔬菜定价补货决策建模实战

1. 从“拍脑袋”到“算数据”为什么蔬菜定价补货值得建模每年国赛C题一出总能引起一阵热议。2023年的这道“蔬菜类商品的自动定价与补货决策”乍一看似乎是个超市运营的日常问题离我们熟悉的微分方程、物理仿真有点远。很多同学的第一反应可能是“这不就是个简单的预测和优化吗用个时间序列预测销量再套个库存模型不就行了” 我当年刚开始接触建模时也这么想过结果被现实狠狠教育了一番。这道题的魅力恰恰在于它用看似平凡的商业场景包裹了从数据处理、不确定性建模、多目标决策到方案落地的完整链条非常考验综合能力。超市里绿叶菜今天卖不完明天就可能蔫掉报废土豆洋葱这类耐储的囤多了又占压资金。价格定高了顾客不买账定低了毛利覆盖不了损耗。补货更是门学问补多了损耗和仓储成本飙升补少了货架空空错过销售机会顾客满意度下降。传统上这些决策严重依赖店长的个人经验也就是我们常说的“拍脑袋”。今天下雨了感觉菜不好卖就少进点明天有促销就多备点货。这种方式在小规模经营时或许有效但在连锁化、数字化的当下它的粗放和低效就成了致命伤。因此这道题的核心价值是让我们用数学和算法的“望远镜”与“显微镜”去透视并优化这个充满不确定性的日常商业过程。它要求我们不再是简单的“调包侠”把数据扔进模型等结果而是要深入思考数据反映了什么规律模型背后的假设是否成立我们的决策建议在真实的、嘈杂的、充满约束的商业环境中是否真的可行接下来我将结合常见的思路误区拆解这道题的几个核心关卡并分享一套经过实战检验的、可扩展的参考实现框架。2. 破题第一步别急着找算法先理解数据和问题边界看到题目很多人的习惯是立刻去想“我用什么模型”——LSTM预测ARIMA还是随机森林这种思路往往会导致后期陷入僵局。正确的打开方式是像侦探一样审视题目给出的所有信息定义清楚我们要解决的到底是什么问题。2.1 问题本质拆解这不是一个题而是三个题的组合仔细阅读赛题描述这里基于常见赛题结构进行还原你会发现它通常包含几个环环相扣的子问题销量与需求预测这是所有决策的基础。给定历史销售数据、成本、定价等信息预测未来一段时间如每天、每周各种蔬菜的需求量。注意这里预测的是“需求”而不是“销量”。销量是需求在库存约束下的实现值。如果货备少了销量就等于需求如果货备多了没卖完销量就小于需求。预测模型必须能区分这个概念。定价决策在预测需求的基础上考虑蔬菜的成本、新鲜度损耗率、市场竞争、顾客价格敏感度等因素制定一个能最大化利润或兼顾其他目标的价格。蔬菜定价的特殊性在于其“易腐性”今天的定价直接影响今天的销量和明天的剩余库存质量进而影响明天的定价决策这是一个动态问题。补货决策在给定定价策略和需求预测下决定每天或每次的补货量。这需要平衡多个矛盾的目标满足预测需求、控制库存持有成本、最小化因腐烂造成的损耗、利用供应商的批量折扣、遵守仓库容量和货架空间限制等。这三个问题不是独立的而是强耦合的。定价影响需求需求预测指导补货补货量又反过来影响库存成本和损耗进而影响未来的定价空间。因此一个割裂的、先预测、再定价、最后补货的流水线式解法往往得不到全局优解。2.2 数据预处理清洗与特征工程是模型的“地基”题目通常会提供一段时间内如过去一年的详细数据可能包括销售流水日期、商品编码、销售量、销售单价、销售金额。商品信息商品编码、品类叶菜、根茎、茄果等、成本价、供应商、保质期/损耗特性。库存记录每日期初库存、入库量、损耗报损量。外部信息可能包含节假日、天气温度、降水量、促销活动标记等。第一步数据清洗。检查并处理缺失值、异常值如某天销量为0但库存充足可能是数据记录缺失某天销量奇高可能是促销或数据错误。对于异常值不能简单删除要结合业务逻辑判断。例如国庆节当天销量暴增是合理的应予以保留并作为节假日特征。第二步构建“真实需求”。这是最关键的一步。由于存在缺货历史销量数据是“被截断”的需求。我们可以用一些方法来估算真实需求简单方法对于缺货日当日销量等于期初库存可以将该日需求估算为“销量 × 一个大于1的系数”这个系数可以根据不缺货日期的平均销量与库存比例来估计。进阶方法使用生存分析Survival Analysis中的概念将缺货视为“删失”数据利用不缺货日期的数据分布来估计整个需求分布。第三步特征工程。将原始数据转化为模型能理解的特征。这比选择模型更重要。对于时间序列预测有效的特征可能包括时间特征年、月、日、星期几、是否为周末、是否为节假日及其前后几天、季度。滞后特征过去1天、3天、7天、14天、30天的销量、价格。滚动统计特征过去7天的平均销量、标准差、最大值、最小值。商品属性特征品类独热编码、成本价、是否易腐如叶菜为1土豆为0。交互特征价格与品类的交互项不同品类对价格敏感度不同、节假日与品类的交互项。外部特征天气数据如最高温、降水量、是否有促销。注意特征不是越多越好。要防止过拟合可以使用特征重要性评估如基于树模型或递归特征消除来选择关键特征。3. 模型构建预测、定价与补货的“铁三角”理解了问题构建了特征我们才进入模型选择阶段。这里提供一个分层、可迭代的建模框架。3.1 需求预测模型融合时序与回归的混合思路单纯用时间序列模型如ARIMA、Prophet可能忽略了价格、促销等外部因素。单纯用回归模型如线性回归、XGBoost可能捕捉不到复杂的周期性和趋势。因此混合模型是更稳健的选择。一种有效的架构是“残差学习”框架基准时序预测首先使用一个稳健的时序模型如季节性分解的STL或Prophet对每个单品的历史销量进行拟合得到仅基于时间规律的预测值y_temporal。这个模型只使用时间特征。残差建模计算历史真实销量或估算需求与y_temporal的残差residual y_true - y_temporal。这个残差包含了时间趋势无法解释的部分比如价格变动、促销、异常天气的影响。机器学习模型拟合残差使用XGBoost或LightGBM等模型以价格、促销、天气、品类等特征为输入预测这个残差值residual_pred。最终预测最终的预测需求y_pred y_temporal residual_pred。这种方法的优点是时序模型抓住了主体规律机器学习模型负责精细化修正两者互补且解释性较强。在编程实现上我们可以用statsmodels或prophet做时序部分用scikit-learn或xgboost做残差回归部分。# 伪代码示例混合预测模型框架 import pandas as pd from prophet import Prophet import xgboost as xgb from sklearn.model_selection import train_test_split # 假设 df 是包含日期‘ds’、销量‘y’、价格‘price’、是否促销‘promo’等特征的DataFrame df pd.read_csv(sales_data.csv) # 步骤1使用Prophet进行基准时序预测 model_prophet Prophet(yearly_seasonalityTrue, weekly_seasonalityTrue, daily_seasonalityFalse) model_prophet.fit(df[[ds, y]]) future model_prophet.make_future_dataframe(periods30) # 预测未来30天 forecast model_prophet.predict(future) df[y_temporal] forecast[yhat].values[:len(df)] # 将拟合值对齐到历史数据 # 步骤2计算残差 df[residual] df[y] - df[y_temporal] # 步骤3准备特征预测残差 features [price, promo, temperature, is_holiday, day_of_week] # 示例特征 X df[features] y_residual df[residual] X_train, X_test, y_train, y_test train_test_split(X, y_residual, test_size0.2, shuffleFalse) # 注意时间序列避免随机打乱 model_xgb xgb.XGBRegressor(objectivereg:squarederror, n_estimators100) model_xgb.fit(X_train, y_train) # 步骤4对于未来预测先有时序预测再用未来特征预测残差 future_features ... # 需要构建未来日期的特征如计划价格、已知节假日 future_temporal forecast[yhat].values[-30:] # 未来30天的时序预测 future_residual_pred model_xgb.predict(future_features) final_demand_pred future_temporal future_residual_pred3.2 定价模型在需求弹性与损耗间寻找平衡点定价不是孤立的它建立在需求预测的基础上并且需求通常与价格负相关。我们需要刻画这种关系即需求的价格弹性。需求函数建模对于每种蔬菜或同质品类可以假设一个简化的需求函数。最常见的是线性需求函数和指数需求函数。线性需求D(p) a - b * p。其中D是预测需求量p是定价a是潜在市场规模b是价格敏感系数。可以通过历史数据价格销量进行线性回归估计a和b。指数需求常弹性D(p) A * p^(-e)。取对数后变为log(D) log(A) - e * log(p)这是一个线性关系e就是价格弹性系数通常为正数。这种形式更符合经济学常识弹性恒定。单日定价优化模型在知道成本c、需求函数D(p)后单日利润为π(p) (p - c) * D(p)。通过求导令导数为零可以解出理论最优价格p* (a b*c) / (2b)线性需求或p* (e/(e-1)) * c指数需求需满足e1。但蔬菜定价的复杂性在于损耗蔬菜会腐烂剩余库存会贬值。假设每日损耗率为θ如叶菜0.2根茎0.05那么今天的剩余库存I_tomorrow (I_today Q_today - D_today) * (1-θ)。今天的定价p_today通过影响D_today直接影响I_tomorrow进而影响明天的决策。这变成了一个多期动态规划问题。库存约束价格不能低到让需求超过库存否则会产生无法满足的需求影响顾客满意度。多目标可能不仅要利润还要考虑销量市场份额、损耗率、库存周转率等。因此更实际的定价模型是一个带约束的动态优化问题。我们可以将其离散化构建一个有限期的决策模型。3.3 补货模型库存论与优化算法的结合补货决策的输入是预测需求D和定价策略决定的预期销量输出是补货量Q。目标是平衡多个成本订货成本每次下单有固定成本如物流、管理。持有成本库存占用资金和仓库空间的成本按天计。缺货成本需求大于库存导致的销售损失和商誉损失。损耗成本因腐烂而丢弃的蔬菜成本。对于不易腐的标准品经典的(s, S)或(Q, R)库存策略很有效。但对于易腐品需要引入损耗率和保质期。一种实用的建模方法是构建一个有限期的随机动态规划SDP或近似动态规划ADP模型状态变量S_t (I_t, d_t)其中I_t是当前库存水平d_t是当天的预测需求随机变量有其分布。决策变量补货量Q_t或定价p_t如果定价也是决策。状态转移I_{t1} max(0, I_t Q_t - min(D_t, I_t Q_t)) * (1-θ)。这里min(D_t, I_tQ_t)是实际销量。即时成本/收益R_t p_t * min(D_t, I_tQ_t) - c * Q_t - h * I_t - v * (I_t * θ)。其中c是进货成本h是单位持有成本v是单位损耗成本可能等于c。目标最大化总期望利润E[∑ R_t]。直接求解这个SDP在商品种类多、周期长时是“维数灾难”。因此我们通常采用近似方法模型预测控制MPC在每个决策点每天我们只优化未来一个较短的时间窗口如未来3-7天的决策并只执行第一天的决策。第二天根据新的实际销售和库存状态重新滚动优化。这大大降低了计算复杂度且能适应不确定性。基于仿真的优化将补货策略参数化例如策略为“当库存低于R时补货到S水平”然后通过大量随机需求仿真评估不同(R, S)参数下的平均利润选择最优参数。4. 方案集成与求解从理论模型到可执行代码将预测、定价、补货三个模块集成起来并求解出可执行的决策是最后也是最关键的一步。这里容易陷入两个极端一是追求模型的复杂和完美导致无法求解二是模型过于简化脱离实际。4.1 设计求解框架MPC是实战中的“瑞士军刀”我强烈推荐使用模型预测控制MPC作为整体求解框架。它的思想非常契合这类动态随机优化问题且易于理解和实现。MPC工作流程如下初始化在第一天开始时拥有当前库存I_0和未来一段时间如7天的外部信息预测天气、节假日。滚动窗口优化 a.预测基于当前信息和历史数据使用第3.1节的混合模型预测未来N天预测窗口内每天的需求分布可以是一个点估计也可以是多个情景。 b.优化建立一个未来N天的确定性或随机优化模型。决策变量是未来N天每天的补货量Q_t和定价p_t。目标函数是这N天的总期望利润。约束包括库存动态、仓库容量、补货上限等。此时我们将未来需求的不确定性用上一步得到的预测值或几个代表性情景来近似替代。c.执行求解这个优化问题得到未来N天的最优决策序列{Q_1*, p_1*, Q_2*, p_2*, ..., Q_N*, p_N*}。但只执行第一天的决策即按照Q_1*补货按照p_1*定价。滚动更新进入第二天。观察到第一天的实际销量D_1_real和实际损耗更新库存状态I_1。将时间窗口向前滚动一天重复步骤2。MPC的优点在于“反馈校正”。它用最新的实际数据来修正模型预测和优化决策对预测误差有很强的鲁棒性。预测窗口N的选择是个权衡N太短可能目光短浅N太长预测不准优化问题也难解。对于蔬菜考虑到其易腐性和销售周期性N3到7天通常是个合理范围。4.2 优化模型求解线性/整数规划与启发式算法MPC框架中的核心是第2步的优化模型。这个模型通常可以表述为一个混合整数线性规划MILP问题。模型要素示例集合天数t in {1,...,N}商品i in {1,...,M}。参数d_{i,t}商品i在第t天的预测需求点估计。c_i商品i的进货成本。p_{i,t}决策变量商品i在第t天的售价或作为参数如果定价策略已定。h_i单位持有成本。θ_i日损耗率。Cap仓库总容量。Shelf_i商品i的货架空间。决策变量Q_{i,t}连续变量商品i在第t天的补货量。I_{i,t}连续变量商品i在第t天结束时的库存。Sales_{i,t}连续变量商品i在第t天的实际销量≤ min(需求 可用库存)。目标函数最大化总利润∑_t ∑_i (p_{i,t} * Sales_{i,t} - c_i * Q_{i,t} - h_i * I_{i,t})。约束条件库存平衡I_{i,t} (I_{i,t-1} Q_{i,t} - Sales_{i,t}) * (1 - θ_i)。销量限制Sales_{i,t} ≤ d_{i,t}且Sales_{i,t} ≤ I_{i,t-1} Q_{i,t}。容量约束∑_i I_{i,t} ≤ Cap和I_{i,t} ≤ Shelf_i。非负与逻辑约束所有变量≥0。这个MILP模型可以用专业的优化求解器如PuLP调用CBC、ortools、Gurobi、CPLEX来求解。对于大规模问题商品数M很多求解可能较慢这时可以分解按品类或关联性不强的商品分组独立优化。启发式规则先用简单的经验规则如报童模型计算出每个单品的大致补货量再用优化模型进行微调和容量协调。遗传算法/模拟退火如果模型非线性程度高可以尝试元启发式算法寻找满意解。4.3 参考代码结构一个模块化的实现蓝图下面给出一个高度概括的、模块化的Python代码结构展示了如何将上述思路串联起来。这只是一个框架每个函数都需要根据具体数据和模型进行填充。import pandas as pd import numpy as np from prophet import Prophet import xgboost as xgb from pulp import LpProblem, LpVariable, lpSum, LpMaximize, LpStatus, PULP_CBC_CMD # 或者使用 ortools.linear_solver import pywraplp class VegetablePricingReplenishmentSystem: def __init__(self, historical_data, cost_data, config): 初始化系统。 historical_data: 历史销售、库存、价格、特征数据。 cost_data: 商品成本、持有成本、损耗率等。 config: 配置参数如预测窗口、优化窗口、仓库容量等。 self.hist_data historical_data self.cost_data cost_data self.config config self.demand_models {} # 存储每个商品的需求预测模型 self.current_inventory self._get_initial_inventory() def _build_demand_forecast_model(self, product_id): 为单个商品构建混合需求预测模型如3.1节所述。 # 1. 提取该商品历史数据 product_data self.hist_data[self.hist_data[product_id] product_id].copy() # 2. 使用时序模型如Prophet拟合基准 # 3. 计算残差 # 4. 使用XGBoost拟合残差 # 5. 保存模型到 self.demand_models[product_id] pass def forecast_demand(self, product_id, future_features_df): 给定未来特征预测商品在未来N天的需求。 if product_id not in self.demand_models: self._build_demand_forecast_model(product_id) model self.demand_models[product_id] # 使用时序部分预测 temporal_pred model[temporal].predict(future_features_df[[ds]]) # 用机器学习部分预测残差 residual_pred model[ml].predict(future_features_df[model[feature_cols]]) final_pred temporal_pred residual_pred return final_pred def mpc_optimization(self, current_date, horizon7): 执行一次MPC滚动优化返回当天决策。 decisions {} all_products self.cost_data[product_id].unique() # 步骤1预测未来horizon天的需求 future_dates pd.date_range(startcurrent_date, periodshorizon, freqD) future_features self._generate_future_features(future_dates) # 构建未来特征已知节假日、计划天气等 demand_forecast {} for pid in all_products: demand_forecast[pid] self.forecast_demand(pid, future_features) # 步骤2构建并求解未来horizon天的优化模型 prob LpProblem(Daily_Replenishment_Pricing, LpMaximize) # 定义决策变量字典 Q LpVariable.dicts(Q, (all_products, range(horizon)), lowBound0) # 补货量 I LpVariable.dicts(I, (all_products, range(horizon1)), lowBound0) # 库存多一期用于初始 S LpVariable.dicts(S, (all_products, range(horizon)), lowBound0) # 销量 # 设置初始库存 for pid in all_products: I[pid][0] self.current_inventory.get(pid, 0) # 目标函数总利润 profit_expr [] for t in range(horizon): for pid in all_products: cost self.cost_data.loc[pid, unit_cost] price ... # 这里价格可以是决策变量也可以是需求函数反推的结果简化起见可以先固定或根据规则设定 holding_cost self.cost_data.loc[pid, holding_cost] profit_expr.append(price * S[pid][t] - cost * Q[pid][t] - holding_cost * I[pid][t]) prob lpSum(profit_expr) # 约束条件 for t in range(horizon): # 库存平衡约束 for pid in all_products: spoilage_rate self.cost_data.loc[pid, spoilage_rate] prob I[pid][t1] (I[pid][t] Q[pid][t] - S[pid][t]) * (1 - spoilage_rate) # 销量约束不能超过预测需求和可用库存 for pid in all_products: prob S[pid][t] demand_forecast[pid][t] prob S[pid][t] I[pid][t] Q[pid][t] # 仓库容量约束简化示例只考虑总库存体积 total_volume lpSum(I[pid][t1] * self.cost_data.loc[pid, volume_per_unit] for pid in all_products) prob total_volume self.config[warehouse_capacity] # 求解 solver PULP_CBC_CMD(msgFalse) prob.solve(solver) # 步骤3提取并返回第一天的决策 if LpStatus[prob.status] Optimal: for pid in all_products: decisions[pid] { replenish: Q[pid][0].varValue, price: ... # 从解中获取或根据规则计算 } else: # 如果无解启用备用启发式规则 decisions self._fallback_heuristic(all_products, demand_forecast) return decisions def _fallback_heuristic(self, product_ids, demand_forecast): 备用启发式规则例如采用报童模型计算补货量价格采用成本加成法。 decisions {} for pid in product_ids: # 简单报童模型补货量 预测需求 安全库存 forecast_d demand_forecast[pid][0] safety_stock ... # 根据历史需求波动计算 decisions[pid] { replenish: max(0, forecast_d safety_stock - self.current_inventory.get(pid, 0)), price: self.cost_data.loc[pid, unit_cost] * 1.3 # 成本加成30% } return decisions def run_daily_operation(self, start_date, end_date): 模拟系统从start_date到end_date的每日运行。 current_date start_date decision_log [] while current_date end_date: # 1. 执行MPC优化得到今日决策 daily_decisions self.mpc_optimization(current_date) # 2. 模拟执行决策在实际系统中这是真实操作 actual_sales self._simulate_sales(current_date, daily_decisions) # 3. 更新库存状态考虑实际销量和损耗 self._update_inventory(current_date, daily_decisions, actual_sales) # 4. 记录日志 decision_log.append({date: current_date, decisions: daily_decisions, actual_sales: actual_sales}) # 5. 进入下一天 current_date pd.Timedelta(days1) return pd.DataFrame(decision_log) # 主程序入口 if __name__ __main__: # 加载数据 hist_df pd.read_csv(historical_sales.csv) cost_df pd.read_csv(product_costs.csv).set_index(product_id) config {warehouse_capacity: 10000, forecast_horizon: 7} # 初始化系统 system VegetablePricingReplenishmentSystem(hist_df, cost_df, config) # 运行模拟 start_date pd.Timestamp(2023-06-01) end_date pd.Timestamp(2023-06-30) operation_log system.run_daily_operation(start_date, end_date) print(operation_log.tail())5. 模型检验、灵敏度分析与论文呈现要点建好模型和系统后如何验证其有效性并在论文中清晰呈现是拿高分的关键。5.1 模型检验回溯测试与关键绩效指标KPI绝不能只用训练集上的表现来评价模型。必须进行严格的回溯测试。方法将历史数据按时间划分为训练集和测试集例如用前10个月训练后2个月测试。在测试集上模拟系统逐日运行每天开始时系统只知道过去的信息用它来做预测和优化决策然后将决策与当天的“真实”数据在测试集中进行比较。需要计算的KPI包括利润相关总利润、平均毛利率、投资回报率。库存相关平均库存水平、库存周转天数、缺货率需求大于库存的天数比例。损耗相关总损耗金额、损耗率损耗量/总进货量。预测准确性使用均方根误差RMSE、平均绝对百分比误差MAPE评估需求预测的精度。特别注意评估在库存不足可能缺货的那些日子的预测误差这更能反映模型估算“真实需求”的能力。将你的模型与基准策略对比例如简单策略每天补货到固定水平如过去7天平均销量按成本固定比例加成定价。经验策略模拟有经验的店长的决策规则可从数据中归纳如周末多进20%。 只有显著、稳定地超越了基准策略你的模型才算有价值。5.2 灵敏度分析找出模型的“脆弱点”和“稳健性”模型依赖于许多假设和参数如损耗率θ、价格弹性e、持有成本h。灵敏度分析就是观察当这些参数在合理范围内变动时模型性能如总利润的变化情况。如何做单因素分析固定其他参数让一个参数如损耗率在[θ-Δθ, θΔθ]范围内变化运行多次模拟观察利润的变化曲线。如果利润对该参数变化非常敏感说明模型在该参数上很脆弱需要更精确地估计该参数或者在策略中加入鲁棒性设计。多因素分析可以使用拉丁超立方抽样等方法同时扰动多个参数观察利润的分布。这能评估模型在参数不确定性下的整体稳健性。场景分析模拟一些极端但可能发生的场景例如连续三天暴雨导致客流减少50%某主要供应商突然断供一周。你的系统决策会产生什么变化利润会下降多少这能体现系统的抗风险能力。在论文中用图表清晰地展示灵敏度分析的结果例如画出利润随关键参数变化的折线图并给出文字解释“如图所示当损耗率估计误差在±20%内时系统利润波动在5%以内表明模型对损耗率参数具有一定的鲁棒性。”5.3 论文写作与可视化讲好一个逻辑闭环的故事国赛论文评审时间紧清晰的逻辑和直观的可视化至关重要。行文逻辑建议问题重述与分析不要照抄题目要用自己的话精炼概括并明确指出问题的核心矛盾如利润最大化与损耗最小化的权衡和子问题划分。模型准备详细阐述数据预处理过程特别是“真实需求”估算、特征工程方法。这是体现你工作扎实程度的地方。模型建立分节阐述预测模型、定价模型、补货模型。对每个模型都要说明为什么选择这个模型与替代模型相比的优势以及模型如何与问题结合公式、变量含义要解释清楚。模型求解重点介绍MPC框架和优化模型的求解方法。如果是用求解器说明是什么求解器如果用了启发式算法描述算法步骤。模型检验与灵敏度分析展示回溯测试的结果表格和对比图用数据证明模型的有效性。展示灵敏度分析的图表和结论。模型评价与推广客观评价模型的优点和局限性例如假设需求函数形式固定未考虑竞争对手突然降价等。提出可能的改进方向并简要说明模型思想可以推广到其他易腐品零售如水果、鲜花、烘焙食品。可视化要点系统框架图用清晰的框图展示“数据输入 - 预测模块 - 优化模块 - 决策输出 - 滚动更新”的整个流程。预测效果图对于几个代表性商品画出历史期真实销量、模型拟合销量以及测试期预测销量与真实销量的对比折线图。决策模拟图选择一段时间如测试期两周画出库存水平、补货量、价格、销量的联动变化图直观展示模型决策的动态过程。灵敏度分析图用折线图或热力图展示关键参数变化对核心KPI的影响。结果对比图用柱状图对比你的模型与基准策略在多个KPI上的表现。记住论文的本质是向评委讲述你发现问题、分析问题、解决问题、验证方案的完整思考过程。代码是工具模型是手段清晰的逻辑和令人信服的证据链才是获得高分的关键。这道C题就像一个微缩的商业智能系统项目完整地走一遍无论比赛结果如何对解决实际问题的能力都是极大的提升。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门