ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

时间序列分析实战:从ARIMA到Prophet,建模竞赛与商业预测核心指南

时间序列分析实战:从ARIMA到Prophet,建模竞赛与商业预测核心指南 1. 从“拍脑袋”到“看数据”为什么时间序列分析是建模的基石如果你做过数学建模尤其是国赛、美赛这类题目大概率遇到过这样的场景题目给了一堆按时间顺序排列的数据比如某城市过去十年的月平均气温、某电商平台连续三年的日销售额、某股票每分钟的成交价。队友们围在一起有人提议“咱们用个回归模型吧”有人反驳“这数据明显有趋势得先处理一下。”最后可能因为对时间序列的“敬畏”不足草草做了个拟合结果模型在测试集上惨不忍睹。这就是时间序列分析的典型困境——它看起来简单不就是按时间排好的数据嘛但处理起来处处是坑。我参加过多次建模竞赛并担任指导见过太多队伍在时间序列问题上折戟沉沙。核心原因在于时间序列数据违背了经典统计学的一个基本假设独立性。今天的销售额往往和昨天、上周同期的销售额高度相关这种“记忆性”使得直接套用普通回归模型会严重高估模型的解释力导致过拟合和预测失效。时间序列分析就是专门用来处理这种带有“时间烙印”的数据的工具箱。它要回答的核心问题可以概括为从历史数据中识别规律分解并利用这种规律预测未来预测。这不仅仅是竞赛的需要更是金融风控、供应链管理、气象预报、工业设备预测性维护等领域的日常。可以说掌握了时间序列分析你就拿到了解读大量现实世界动态数据的钥匙。本文将从实战出发抛开复杂的数学推导聚焦于“怎么用”和“为什么这么用”带你系统性地构建时间序列建模的完整知识框架与实操能力。2. 理解时间序列的“五脏六腑”构成与分解在动手建模前我们必须像医生一样先学会“看片子”理解一个时间序列是由哪些基本成分“组装”起来的。通常一个时间序列 ( Y_t ) 可以被视为四个部分的叠加或乘积组合趋势 (Trend, T_t): 指数据在较长时期内呈现的持续向上或向下的基本运动方向。比如随着经济发展和人口增长一个城市的用电量在十年间整体呈上升趋势。它反映了事物发展的长期惯性。季节性 (Seasonality, S_t): 指在固定周期如一年、一月、一周、一天内由于自然或社会因素引起的规律性波动。例如冰淇淋销量夏季高冬季低年周期商场营业额周末高工作日低周周期交通流量早晚出现高峰日周期。季节性是可预测的、严格周期性的。循环性 (Cyclical, C_t): 指周期不固定、波动幅度也变化的长期波动通常与经济周期相关一个循环可能持续数年。它和季节性的核心区别在于周期长度不固定。在多数实际分析中尤其是中短期数据循环成分常被合并到趋势成分中一并考虑。残差/不规则波动 (Residual/Irregular, I_t): 剔除趋势、季节性和循环性后剩下的无法用系统模型解释的随机波动。它通常被认为是白噪声但其中也可能包含未被捕捉的短期依赖关系或突发事件的影响。一个经典的加法模型表示为( Y_t T_t S_t C_t I_t )。而乘法模型则为( Y_t T_t \times S_t \times C_t \times I_t )适用于波动幅度随时间增大的情况如指数增长伴随季节性波动可通过取对数转换为加法模型。为什么分解如此重要洞察本质分解能让我们直观地看到数据背后的主要驱动力。是长期趋势主导还是季节性波动更明显平稳化处理大多数时间序列模型如ARIMA要求数据是“平稳”的即均值和方差不随时间变化。通过分解并移除趋势和季节性我们可以得到相对平稳的残差序列便于后续建模。预测基础我们可以分别预测趋势成分和季节性成分再将它们组合起来得到最终预测。STL分解法就是为此而生的强大工具。注意在实际操作中尤其是面对商业数据严格区分“季节性”和“循环性”非常困难且意义有限。对于建模而言更务实的做法是关注“是否有固定周期”的波动。有就按季节性处理没有固定周期但长期看有起伏可以将其影响融入趋势或使用更复杂的模型如带外部变量的模型来捕捉。3. 平稳性检验模型生效的“入场券”前面提到很多经典时间序列模型如ARIMA要求数据是平稳的。那么如何判断你的数据是否平稳呢这里有两个黄金准则和对应的检验方法准则一均值平稳。时间序列在不同时间段的均值应该大致相同没有明显的上升或下降趋势。可视化观察是最直观的第一步画出时序图如果曲线没有明显的长期向上或向下倾斜初步符合。准则二方差平稳。时间序列在不同时间段的波动幅度方差应该大致相同。如果数据早期波动小后期波动剧烈例如某些成长型公司的股价则方差不平稳。定量检验ADF检验 (Augmented Dickey-Fuller Test)光靠肉眼不靠谱我们需要统计检验。ADF检验的原假设H0是序列存在单位根即非平稳。备择假设H1是序列平稳。检验结果主要看两个值ADF统计量 (ADF Statistic)通常为负值其绝对值越大越倾向于拒绝原假设即越倾向于认为序列平稳。p值 (p-value)这是决策的关键。我们通常设定一个显著性水平如0.05。如果p-value 0.05我们就有足够的证据拒绝“序列非平稳”的原假设认为序列是平稳的。Python实操示例假设我们有一个名为sales_data的Pandas Series索引为时间。import pandas as pd from statsmodels.tsa.stattools import adfuller # 执行ADF检验 result adfuller(sales_data.dropna()) # 确保没有缺失值 print(ADF Statistic: %f % result[0]) print(p-value: %f % result[1]) print(Critical Values:) for key, value in result[4].items(): print(\t%s: %.3f % (key, value)) # 判断 if result[1] 0.05: print(序列是平稳的 (拒绝原假设)) else: print(序列是非平稳的 (无法拒绝原假设))如果序列不平稳怎么办这是常态别慌。我们有“三板斧”差分 (Differencing)最常用、最有效的方法。计算当前值与前一时刻值的差值。一阶差分公式( \nabla Y_t Y_t - Y_{t-1} )。如果一阶差分后仍不平稳可以进行二阶差分。在Python中sales_data.diff().dropna()即可得到一阶差分序列然后再次进行ADF检验。对数变换如果序列存在指数增长趋势方差随时间增大先取对数np.log(series)再进行差分常能同时稳定均值和方差。分解法如前所述使用STL等方法分解出趋势和季节性对相对平稳的残差序列进行建模。我的踩坑经验不要过度差分我曾在一个项目中对一组有强年季节性的月度数据连续做了两次差分虽然ADF检验显示平稳了但模型变得极其复杂且难以解释预测结果反而更差。经验法则是通常一阶差分足以消除线性趋势结合季节性差分如对于月度数据做周期为12的差分消除季节性。差分后务必画图观察确保序列看起来是围绕一个恒定均值波动。4. 核心预测模型实战从经典ARIMA到现代神经网络当我们拥有一个相对平稳的时间序列或通过差分等手段使其平稳后就可以选择模型进行拟合和预测了。下面介绍几个最核心、最实用的模型。4.1 ARIMA模型时间序列的“经典力学”ARIMA (Autoregressive Integrated Moving Average) 模型是时间序列分析的基石它巧妙地将三种思想结合在一起AR (自回归, p)用过去p个时间点的值来预测当前值。公式可简化为当前值 常数 φ1 * (上一时刻值) φ2 * (上两时刻值) ... 误差。这捕捉了数据的“惯性”或“记忆”。I (差分, d)通过d阶差分使非平稳序列变得平稳如上一节所述。MA (移动平均, q)用过去q个时间点的预测误差白噪声来改进当前预测。公式可简化为当前值 常数 当前误差 θ1 * (上一时刻误差) ...。这有助于模型吸收突然的冲击或波动。因此一个ARIMA模型由三个参数定义(p, d, q)。如何确定 p, d, q确定 d通过ADF检验找到使序列平稳所需的最小差分阶数。通常d0平稳或d1一阶差分后平稳。观察ACF/PACF图这是确定p和q的传统方法。自相关函数 (ACF)图展示当前序列与自身滞后k期序列之间的相关性。如果ACF图“拖尾”逐渐衰减至0可能提示需要MA成分。偏自相关函数 (PACF)图在控制了中间滞后项的影响后当前序列与滞后k期序列之间的相关性。如果PACF图在滞后p阶后“截尾”突然降至接近0则提示AR的阶数可能为p。使用网格搜索与AIC/BIC准则更现代、更自动化的方法是让计算机帮我们选。我们设定p,d,q的可能范围用所有参数组合拟合模型然后选择AIC (Akaike Information Criterion)或BIC (Bayesian Information Criterion)值最小的模型。这两个指标在衡量模型拟合优度的同时惩罚了模型复杂度避免过拟合。通常AIC倾向于选择更复杂的模型BIC惩罚更重倾向于更简洁的模型。Python实战拟合与预测ARIMAimport pandas as pd import numpy as np from statsmodels.tsa.arima.model import ARIMA from statsmodels.graphics.tsaplots import plot_acf, plot_pacf import matplotlib.pyplot as plt # 1. 准备数据假设已进行差分处理得到平稳序列 stationary_series # 2. 观察ACF/PACF图辅助判断 fig, axes plt.subplots(1, 2, figsize(12,4)) plot_acf(stationary_series, lags40, axaxes[0]) plot_pacf(stationary_series, lags40, axaxes[1], methodywm) # 推荐使用‘ywm’或‘ld’ plt.show() # 3. 自动定阶以网格搜索为例实际更常用 pmdarima 库的 auto_arima # 这里演示手动指定一个模型 (p2, d1, q2) model ARIMA(sales_data, order(2, 1, 2)) # 注意这里用原始数据d1已在order中指定 model_fit model.fit() print(model_fit.summary()) # 查看模型详情检查系数显著性 # 4. 进行预测未来5个时间点 forecast model_fit.forecast(steps5) print(forecast)ARIMA的局限性ARIMA是强大的线性模型但它假设数据是单变量的且未来的规律与过去完全相同。它难以很好地处理多重季节性例如同时存在周季节性和年季节性的数据。外部变量影响如促销活动、天气对销量的影响。长期复杂的非线性关系。4.2 SARIMA模型为ARIMA加上“季节引擎”SARIMA (Seasonal ARIMA) 是ARIMA的自然扩展专门用来处理具有固定周期季节性如月度、季度数据的时间序列。它在ARIMA的(p, d, q)基础上增加了四个季节性参数(P, D, Q, s)P: 季节性自回归阶数。D: 季节性差分阶数。Q: 季节性移动平均阶数。s: 季节周期长度月度数据s12季度数据s4周数据s7。一个完整的SARIMA模型表示为SARIMA(p, d, q)(P, D, Q)[s]。例如SARIMA(1,1,1)(1,1,1)[12]表示对原始数据做了1阶非季节性差分和1阶周期为12的季节性差分并包含了非季节性和季节性的AR、MA项各一阶。Python实战使用SARIMAfrom statsmodels.tsa.statespace.sarimax import SARIMAX # 拟合一个 SARIMA(1,1,1)(1,1,1,12) 模型 model SARIMAX(sales_data, order(1, 1, 1), # 非季节性部分 (p,d,q) seasonal_order(1, 1, 1, 12)) # 季节性部分 (P,D,Q,s) model_fit model.fit(dispFalse) # dispFalse 减少迭代信息输出 print(model_fit.summary()) # 预测 forecast model_fit.forecast(steps12) # 预测未来12个月实操心得对于有明显季节性的商业数据如零售销售额SARIMA通常是第一个要尝试的基准模型。它的解释性强结果相对稳定。但参数(p,d,q)(P,D,Q)[s]的组合空间巨大手动调参如同大海捞针。强烈建议使用pmdarima库的auto_arima函数进行自动模型选择它能高效地搜索最优参数组合并自动处理差分阶数的确定是建模竞赛和实际项目中的效率神器。4.3 Prophet面向商业分析的“黑盒”利器由Facebook核心数据科学团队开源的Prophet是处理商业时间序列的“瑞士军刀”。它的设计哲学是让分析师更关注业务逻辑而非统计细节。Prophet将时间序列分解为趋势、季节性和假日效应三个主要部分并允许用户灵活地添加自定义的回归项如促销活动标记。Prophet的核心优势对缺失值和异常值稳健不像ARIMA对数据完整性要求那么高。内置多种趋势模型包括线性的、逻辑的、以及可自动检测变点的饱和增长模型能很好地处理趋势变化。强大的季节性拟合使用傅里叶级数来拟合任意形状的季节性能轻松处理多重季节性如同时拟合周和年周期。直观的假日效应可以方便地添加节假日列表模型会学习节假日期间的特殊影响。全自动基本不需要调参就能得到不错的预测结果并且提供直观的不确定性区间。Python实战快速上手Prophetfrom prophet import Prophet import pandas as pd # Prophet要求输入数据框有两列ds (日期类型) 和 y (数值) df pd.DataFrame({ ds: pd.date_range(start2019-01-01, periodslen(sales_data), freqM), # 假设是月度数据 y: sales_data.values }) # 1. 创建并拟合模型 model Prophet( yearly_seasonalityTrue, # 开启年季节性 weekly_seasonalityFalse, # 如果是日数据且想用周季节性设为True daily_seasonalityFalse, seasonality_modeadditive # 或 multiplicative根据数据特性选择 ) # 如果知道节假日可以这样加model.add_country_holidays(country_nameCN) model.fit(df) # 2. 构建未来时间框架并预测 future model.make_future_dataframe(periods12, freqM) # 预测未来12个月 forecast model.predict(future) # 3. 可视化 fig1 model.plot(forecast) # 预测结果图 fig2 model.plot_components(forecast) # 分解成分图趋势、季节性Prophet的适用场景与局限Prophet非常适合具有强季节性、节假日效应且趋势相对平滑的商业数据如日活跃用户、商品销量、能源消耗。它的输出非常“好看”且易于向业务方解释。但它的“黑盒”特性也是双刃剑你很难像理解ARIMA系数那样理解Prophet内部到底做了什么。对于没有明显季节性、或受复杂外部因素驱动的序列如高频金融数据Prophet可能表现平平。4.4 深度学习模型LSTM与Transformer当数据量足够大、序列依赖关系非常复杂且非线性时深度学习模型开始展现其威力。LSTM (长短期记忆网络)一种特殊的循环神经网络(RNN)通过“门”机制输入门、遗忘门、输出门有效解决了传统RNN的梯度消失/爆炸问题能够学习长期依赖关系。它非常适合处理时间序列因为它本质上就是为序列数据设计的。Transformer最初为自然语言处理设计但其核心的“自注意力机制”能够捕捉序列中任意两个时间点之间的依赖关系不受距离限制。近年来通过架构调整如限制注意力范围、使用因果掩码Transformer在时间序列预测领域也取得了顶尖效果。为什么在数学建模中要谨慎使用深度学习模型数据量要求高LSTM和Transformer通常需要大量的历史数据成千上万个时间点才能训练出稳定、不过拟合的模型。数学建模竞赛提供的数据往往只有几百条极易过拟合。计算资源与时间训练深度学习模型耗时较长对硬件有要求。在有限的竞赛时间内调参和训练可能成为负担。可解释性差模型如同一个黑箱你很难解释为什么它做出了某个预测这在需要模型解释性的场合是硬伤。结果的不稳定性由于随机初始化和优化过程每次训练的结果可能有细微差异。我的建议在数学建模中将深度学习模型作为“高级武器”备用。优先使用Prophet、SARIMA等传统方法建立稳健的基线模型。只有当数据量充足、问题明显非线性、且传统方法效果不佳时再考虑使用LSTM等模型。使用时务必进行严格的交叉验证并准备好解释模型的基本原理和输入输出结构。一个简单的LSTM预测示例框架import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense from sklearn.preprocessing import MinMaxScaler # 1. 数据预处理归一化 scaler MinMaxScaler(feature_range(0,1)) scaled_data scaler.fit_transform(sales_data.values.reshape(-1,1)) # 2. 创建监督学习数据集用过去N个点预测下1个点 def create_dataset(data, time_step1): X, y [], [] for i in range(len(data)-time_step-1): X.append(data[i:(itime_step), 0]) y.append(data[i time_step, 0]) return np.array(X), np.array(y) time_step 12 # 用过去12个月预测下一个月 X, y create_dataset(scaled_data, time_step) X X.reshape(X.shape[0], X.shape[1], 1) # reshape为 [样本数, 时间步长, 特征数] # 3. 划分训练集和测试集 train_size int(len(X) * 0.8) X_train, X_test X[:train_size], X[train_size:] y_train, y_test y[:train_size], y[train_size:] # 4. 构建LSTM模型 model Sequential() model.add(LSTM(units50, return_sequencesTrue, input_shape(time_step, 1))) model.add(LSTM(units50, return_sequencesFalse)) model.add(Dense(units25)) model.add(Dense(units1)) model.compile(optimizeradam, lossmean_squared_error) # 5. 训练模型 model.fit(X_train, y_train, batch_size32, epochs100, validation_data(X_test, y_test), verbose1) # 6. 预测并反归一化 predictions model.predict(X_test) predictions scaler.inverse_transform(predictions) # 将预测值转换回原始尺度5. 模型评估与选择避免“纸上谈兵”拟合了模型做出了预测如何判断模型的好坏决不能只看训练集上的拟合效果那必然很好必须用未见过的数据来检验。以下是核心的评估流程与方法。5.1 划分训练集与测试集这是评估的黄金准则。永远不要用训练模型的数据来评估它。通常我们将时间序列的后20%-30%作为测试集保持时间顺序。例如有100个月的数据用前80个月训练后20个月测试。5.2 核心评估指标选择哪个指标取决于你的业务目标。MAE (平均绝对误差)( MAE \frac{1}{n}\sum_{i1}^{n}|y_i - \hat{y}_i| )含义预测值与真实值绝对误差的平均值。特点对异常值不敏感量纲与原始数据相同非常直观。例如MAE10意味着平均每次预测偏差10个单位。适用场景当所有预测误差的权重相同时使用。MSE (均方误差) / RMSE (均方根误差)( RMSE \sqrt{\frac{1}{n}\sum_{i1}^{n}(y_i - \hat{y}_i)^2} )含义预测误差平方的平均值的平方根。特点对大的误差惩罚更重因为平方操作。RMSE的量纲也与原始数据相同但数值通常比MAE大。适用场景最常用的指标之一尤其关注大误差因为大误差成本更高的场景如电力负荷预测中一个巨大的预测失误可能导致严重后果。MAPE (平均绝对百分比误差)( MAPE \frac{100%}{n}\sum_{i1}^{n}|\frac{y_i - \hat{y}_i}{y_i}| )含义将每个绝对误差表示为真实值的百分比再求平均。特点无量纲便于比较不同尺度的时间序列。例如可以说模型A的MAPE是5%模型B是8%A更好。致命缺点当真实值 ( y_i ) 为0或接近0时MAPE会趋于无穷大或变得极不稳定失去意义。对于有零值或值域很小的序列慎用MAPE。SMAPE (对称平均绝对百分比误差)( SMAPE \frac{100%}{n}\sum_{i1}^{n}\frac{|y_i - \hat{y}_i|}{(|y_i||\hat{y}_i|)/2} )含义分母是真实值和预测值的平均值解决了真实值为零的问题。特点同样是无量纲指标对零值更友好。但其“对称”性导致在预测值远大于或远小于真实值时计算出的误差有上界200%且解释性不如MAPE直观。我的选择策略首选RMSE因为它对大误差敏感在大多数预测任务中我们更不希望出现大的偏差。辅助使用MAE了解误差的典型大小。需要百分比指标时优先考虑SMAPE尤其是数据中有零值或值域跨度大时。如果数据均为正且远离零MAPE也可用但要在报告中说明其局限性。永远不止看一个指标结合多个指标和可视化绘制预测值与真实值的对比图来综合判断。5.3 交叉验证的“时间陷阱”对于独立同分布的数据我们可以用K折交叉验证。但时间序列数据具有时间依赖性未来的数据不能用来预测过去。因此必须使用时序交叉验证例如“滚动预测”或“扩展窗口”验证。滚动预测验证示例 假设有100期数据我们按以下步骤验证用第1-70期数据训练模型预测第71期。用第1-71期数据训练模型预测第72期。... 以此类推直到用第1-99期数据训练预测第100期。 这样我们得到了30个预测值可以计算这30个预测值对应的RMSE、MAE等这个评估结果更稳健地反映了模型在多步预测中的表现。5.4 模型选择实战以销量预测为例假设我们有一个产品的月度销量数据具有明显的年度季节性。我们尝试了三种模型SARIMA (通过auto_arima自动搜索)、Prophet、以及一个简单的LSTM。在保留了最后24个月作为测试集后我们得到以下评估结果模拟数据模型RMSEMAESMAPE (%)训练时间可解释性SARIMA152.3118.78.2%中等高Prophet168.5130.49.1%快中LSTM160.1125.98.7%慢低分析SARIMA在三个误差指标上均表现最佳且模型系数可解释例如可以说明上一期的值对当期有多大影响。Prophet表现稍逊但训练最快且能直观展示趋势、季节性和假日效应分解图便于向非技术人员汇报。LSTM表现居中但训练耗时最长且是一个黑盒模型。决策在这个案例中SARIMA是最佳选择。它不仅预测精度最高而且模型透明符合数学建模对模型解释性的要求。Prophet可以作为快速基线模型和辅助分析工具。LSTM在此数据量下并未展现出优势暂时不予采用。这个选择过程告诉我们没有“最好”的模型只有“最合适”的模型。选择取决于数据特性、精度要求、解释性需求和计算资源。6. 完整建模流程与避坑指南结合以上所有内容一个稳健的时间序列建模流程如下数据探索与可视化绘制时序图观察整体趋势、季节性、异常值。计算基本统计量。平稳性检验与处理使用ADF检验判断平稳性。若不平稳依次尝试对数变换、差分常规差分、季节性差分。时间序列分解使用STL或移动平均法进行分解深入理解数据构成。STL使用statsmodels的STL对异常值更稳健且能处理复杂的季节性是当前首选。模型选择与训练基准模型先尝试简单模型如历史均值法、朴素法用上一期值作为预测、简单移动平均。这为你后续的复杂模型提供一个必须超越的底线。经典统计模型对于有季节性的数据优先用pmdarima.auto_arima搜索最优SARIMA模型。对于无季节性或有趋势的数据尝试ARIMA或指数平滑如Holt-Winters。现代工具使用Prophet进行快速建模和分解分析尤其适合有节假日效应的商业数据。高级模型当数据量大、问题复杂且上述方法效果不佳时考虑LSTM、Transformer等深度学习模型。模型评估在测试集上使用RMSE、MAE、SMAPE等多个指标评估并绘制预测值与真实值的对比图。使用时序交叉验证获得更稳健的评估。模型融合如果单一模型表现达到瓶颈可以考虑简单融合例如取SARIMA和Prophet预测结果的加权平均有时能提升鲁棒性。预测与报告用最终选定的模型进行未来预测并给出预测区间不确定性估计。在报告中不仅要展示结果更要解释模型选择的理由、关键参数的含义以及模型的局限性。常见“坑点”与应对策略坑1忽略季节性检验直接上ARIMA。现象模型残差图显示明显的周期性相关。对策画图观察使用季节性分解STL。如果存在固定周期务必使用SARIMA或进行季节性差分。坑2过度差分导致序列信息丢失。现象差分后的序列方差变得极小或者ACF/PACF图显示异常的相关模式。对策差分后务必画图并再次进行ADF检验。通常一阶常规差分加一阶季节性差分足矣。遵循“最小差分”原则。坑3在测试集上反复调参导致“数据窥探”偏差。现象模型在测试集上表现极好但在真正的未来数据上崩盘。对策严格区分训练集、验证集用于调参和测试集仅用于最终评估一次。或者使用时序交叉验证来指导调参。坑4使用未来信息进行预测。现象在特征工程中不小心使用了未来时间点的统计量如全局均值、标准差来归一化或构造特征。对策所有数据处理如归一化都必须在训练集上计算参数然后应用到验证集和测试集模拟实时预测场景。坑5对异常值处理不当。现象一个极端值如疫情封控期间的销量暴跌扭曲了整个模型的趋势估计。对策在建模前识别并处理异常值。可以采用盖帽法用分位数替换、视为缺失值并用插值法填充或者在Prophet等模型中将其标记为“特殊事件”。时间序列建模是一门结合了统计理论、业务理解和实践经验的科学。它没有一成不变的公式需要根据具体数据和问题灵活运用各种工具。最好的学习方式就是找到一组真实的数据从头到尾走一遍这个流程把每个坑都踩一遍。当你能够清晰地向队友或评委解释你为什么选择这个模型、参数代表什么、以及模型的预测区间意味着什么时你就真正掌握了这门技术。记住一个考虑周全、流程严谨、解释清晰的简单模型远胜于一个效果略好但无人能懂的黑盒复杂模型。
返回列表