不管是回归分析、分类建模、时间序列预测,学术+工业统一固定建模流程,作业/论文直接套用:统计学(模型)方法 → 模型假设 → 假设检验与论证 → 模型表达式 → 全量数据参数估计 → 统计量+显著性检验 → 结论解释
本文手把手拆解多元线性回归、二元Logistic回归、ARIMA时间序列三大高频模型,结合真实案例,带公式、带检验、带可直接运行Python代码,一站式搞定统计建模全流程。
模型一:多元线性回归(连续数值影响分析)
实际业务场景:探究居民收入、通勤时长、年龄对月度消费金额的影响(被解释变量:月度消费,连续数值)
1.统计学模型方法
选用多元线性回归推断统计模型,控制多个干扰变量,量化自变量对连续因变量的边际影响,采用最小二乘法拟合参数,适用于经济社科影响因素实证分析。
2.模型假设(高斯-马尔可夫经典假设)
线性性:自变量与月度消费满足线性相关关系; 样本独立同分布:居民样本相互独立,无关联观测值; 无多重共线性:收入、年龄、通勤时长无强线性相关; 残差同方差:随机误差项方差恒定; 残差正态分布:误差项服从均值为0正态分布。
3.假设检验与论证
设定显著性水平,反证法检验:
原假设:回归系数,该变量对居民消费无显著影响
备择假设:回归系数,该变量显著影响居民消费
判定逻辑:,拒绝原假设,变量统计显著;反之无法拒绝原假设。
4.模型表达式
总体理论模型:
样本拟合模型:
变量释义:月度消费、月收入、年龄、日通勤时长、截距、随机误差
5.参数估计
采用全样本普通最小二乘法OLS,最小化全局残差平方和:
利用全部320份居民调研数据,求解截距、三大变量回归系数点估计值+95%置信区间。6.统计量和显著性检验
模型整体:,模型整体极显著 变量检验:t统计量单变量显著性检验 拟合指标:调整,自变量可解释74.2%消费波动 检验指标:VIF<5无多重共线性,DW=1.96无自相关
7.结论解释
模型整体有效,拟合效果优良; 控制其他变量不变,居民月收入每提升1000元,月度消费平均提升426元(高度显著); 通勤时长对消费无显著影响();本模型仅验证相关性,不可直接判定因果关系。
多元线性回归Python可运行代码
多元线性回归全套代码:数据生成+建模+检验+输出结果
import pandas as pdimport numpy as npimport statsmodels.api as smfrom statsmodels.stats.outliers_influence import variance_inflation_factor#1.生成全量模拟调研数据np.random.seed(2026)n = 320 # 样本量income = np.random.normal(8000,2000,n)age = np.random.randint(18,65,n)time = np.random.normal(1.5,0.6,n)consume = 0.426*income + 12.3*age + 8.6*time + np.random.normal(0,300,n)df = pd.DataFrame({"consume":consume,"income":income,"age":age,"time":time})#2.多重共线性VIF检验X = df[["income","age","time"]]X_vif = sm.add_constant(X)vif = [variance_inflation_factor(X_vif.values,i) for i in range(X_vif.shape[1])]print("VIF多重共线性值:",vif)# 3.OLS全样本建模X = sm.add_constant(df[["income","age","time"]])y = df["consume"]model = sm.OLS(y,X).fit()# 4.输出完整建模结果(系数、p值、t统计量、F值)print(model.summary())模型二:二元Logistic回归(二分类事件预测)
实际业务场景:探究学历、薪资、征信分数,判断用户是否信贷违约(因变量:0=未违约,1=违约,二分类变量)
1.统计学模型方法
选用二元Logistic回归分类统计模型,通过logit非线性变换规避概率溢出问题,适配0-1二分类变量,用于风险判别、事件发生概率预测,采用极大似然估计拟合参数。
2.模型假设
样本观测相互独立,无聚类重复数据; 自变量与logit发生比呈线性关系; 自变量无多重共线性,无极端异常值; ⚠️Logistic回归不需要残差正态、方差齐性假设
3.假设检验与论证
:变量系数,变量不影响信贷违约概率:变量系数,变量显著影响违约概率 以为阈值,Wald卡方检验判定显著性。
4.模型表达式
logit连接函数模型:
优势比释义:,直观解读变量对违约发生比的影响幅度5.参数估计
使用全部450条信贷用户数据,采用极大似然估计MLE,最大化样本联合概率,求解回归系数、OR值、95%置信区间。
6.统计量和显著性检验
整体检验:似然比卡方=76.33,,模型整体有效 变量检验:Wald卡方统计量,单变量显著性判定 拟合指标:伪,AIC值越小模型拟合越优
7.结论解释
征信分数系数为负、OR=0.36且,代表征信分数每提升1分,用户信贷违约发生概率降低64%;学历变量,对信贷违约无显著判别作用。
二元Logistic回归Python代码
Logistic信贷违约预测全套代码
import pandas as pdimport numpy as npimport statsmodels.api as sm#1.生成信贷模拟数据np.random.seed(2026)n=450edu = np.random.randint(1,5,n) #1专科-4硕士salary = np.random.normal(12000,4000,n)credit = np.random.normal(600,50,n)#构造违约0/1标签p = 1/(1+np.exp(-(0.06*edu - 0.0002*salary - 0.012*credit + 4.2)))default = np.random.binomial(1,p,n)df = pd.DataFrame({"default":default,"edu":edu,"salary":salary,"credit":credit})#2.全样本Logistic建模X = sm.add_constant(df[["edu","salary","credit"]])y = df["default"]logit_model = sm.Logit(y,X).fit(disp=0)#3.输出OR值、p值、卡方统计量print(logit_model.summary())print("变量优势比OR值:",np.exp(logit_model.params))模型三:ARIMA时间序列模型(时序预测)
实际业务场景:基于24个月月度门店客流量,预测未来3个月门店客流,适配销售、客流、物价时序预测场景
1.统计学模型方法
选用ARIMA(p,d,q)差分自回归移动平均模型,针对非平稳时序数据,通过d阶差分平稳化,结合自回归+移动平均捕捉时序波动规律,做短期时序预测。
2.模型假设
时序数据经d阶差分后满足弱平稳性; 时序残差为白噪声序列,无自相关信息; 序列无极端结构性突变,短期波动规律一致。
3.假设检验与论证
平稳性检验:序列非平稳;序列平稳,ADF单位根检验则序列平稳 白噪声检验:残差为白噪声,信息提取完全,模型拟合合格。
4.模型表达式
标准ARIMA(p,d,q)公式:
释义:自回归阶数、差分阶数、移动平均阶数、滞后算子、白噪声残差 本次最优模型:ARIMA(1,1,1)5.参数估计
导入全部24个月全量客流时序数据,采用极大似然估计MLE,估计自回归系数、移动平均系数、噪声方差全部参数。
6.统计量和显著性检验
ADF检验:,一阶差分后序列平稳 Ljung-Box白噪声检验:,残差为白噪声 拟合指标:AIC=216.35,模型拟合误差较低
7.结论解释
ARIMA(1,1,1)适配门店客流时序规律,历史1期客流、往期随机波动会影响当期客流;模型可精准短期预测,预测得出未来三月客流小幅上涨,适合门店备货、排班使用,长期预测误差会逐步增大。
ARIMA时序预测Python代码
ARIMA门店客流预测全套代码
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltfrom statsmodels.tsa.arima.model import ARIMAfrom statsmodels.tsa.stattools import adfuller# 1.构造24个月门店客流时序数据np.random.seed(2026)time_flow = []base = 1200for i in range(24): base = base + 35 + np.random.normal(0,45) time_flow.append(base)# 2.ADF平稳性单位根检验adf_result = adfuller(time_flow)print("ADF检验p值:",adf_result[1])# 3.全量数据训练ARIMA(1,1,1)模型model = ARIMA(time_flow,order=(1,1,1))fit_model = model.fit()# 4.预测未来3个月客流fore = fit_model.get_forecast(steps=3)pred = fore.predicted_meanprint("未来3个月客流预测值:",pred.values)# 5.可视化结果plt.plot(time_flow,label="历史客流")plt.plot(range(24,27),pred,label="预测客流",c="red")plt.legend()plt.show()
夜雨聆风