1、什么是回归?
统计学中的回归是一种用于建立变量之间关系的分析方法。回归分析的主要目标是通过对一个或多个自变量(独立变量)与一个因变量(依赖变量)之间的关系进行建模,从而预测或解释因变量的变化。
回归分析可分为以下两种主要类型:
简单线性回归:当只涉及一个自变量和一个因变量时,称为简单线性回归。它可以用一条直线来建模自变量和因变量之间的关系。
多元回归:当涉及多个自变量时,称为多元回归。它通过多个自变量来解释因变量的变化,可以用一个平面或高维超平面来建模自变量和因变量之间的关系。
回归分析的步骤如下:
收集数据:收集自变量和因变量的观测数据。
可视化数据:通过散点图等可视化方法,初步了解自变量和因变量之间的关系。
建立模型:根据数据拟合适当的回归模型,例如在简单线性回归中,拟合一条直线;在多元回归中,拟合一个平面或高维超平面。
参数估计:利用统计方法,估计回归模型中的参数,例如拟合直线中的斜率和截距。
模型评估:评估回归模型的拟合程度和预测能力,检查模型的统计显著性和预测误差等。
预测与解释:使用建立的回归模型进行预测,同时解释自变量和因变量之间的关系,寻找变量对因变量的影响程度。
回归分析在实际应用中广泛用于各个领域,如经济学、社会科学、医学、市场营销等,用于预测和解释现象,以及进行决策支持和数据驱动的分析。Python中有许多常用的数据科学库,如NumPy、Pandas和Scikit-learn,它们提供了强大的回归分析功能,方便数据分析师和研究人员进行回归建模。
2、数据分析师为什么使用回归?
数据分析师使用回归分析的主要目的是探索和建立变量之间的关系,以便进行预测、解释和决策支持。回归分析在数据分析领域具有广泛的应用,以下是数据分析师使用回归分析的几个常见原因:
预测能力:回归分析可以通过建立变量之间的数学模型,根据自变量的值预测因变量的值。这在市场趋势预测、销售预测、股票价格预测等场景中非常有用。
因果关系解释:回归分析可以帮助分析师理解自变量与因变量之间的因果关系。通过检查回归系数,可以了解自变量的单位变化对因变量的影响程度。
变量影响分析:回归分析可以识别对因变量影响最大的自变量。这对于决策制定和资源分配非常重要,因为可以集中精力优化对因变量有重要影响的自变量。
精细化定位:通过回归分析,可以确定在给定条件下,因变量的最优值对应的自变量取值范围,帮助精细化产品设计和优化策略。
假设检验:回归分析还可以用于检验自变量是否对因变量产生显著影响。这对于确定变量的重要性和排除不显著的因素很有帮助。
异常值检测:回归分析可以帮助识别异常值,即因变量与自变量关系中偏离模型的观测值。这些异常值可能是数据收集或输入错误,也可能是需要额外关注的特殊情况。
总的来说,回归分析是数据分析师的重要工具,能够帮助他们从数据中获取有价值的信息。通过建立回归模型,分析师可以预测未来趋势、解释因果关系、进行影响因素分析和做出更加科学的决策。同时,Python等数据科学工具的广泛使用使得回归分析变得更加高效和灵活。
3、简单线性回归 案例
'''
简单线性回归
假设我们有一组数据,其中自变量X表示花费在广告上的金额(以千元为单位),因变量Y表示对应的销售额(以万美元为单位)。
我们希望通过回归分析来建立广告投入和销售额之间的关系,并预测未来的销售额。
在这个案例中,我们通过linregress函数执行简单线性回归分析。
然后,我们输出了回归结果,包括斜率、截距、相关系数、p值和标准误差。
最后,我们绘制了散点图和回归线来可视化数据和回归模型。
我们还使用回归模型预测了新数据点的销售额。
'''
import numpy as np
from scipy.stats import linregress
import matplotlib.pyplot as plt
# 假设我们的数据
X = np.array([2, 3, 4, 5, 6, 7, 8, 9, 10]) # 广告投入(千元)
Y = np.array([3, 5, 4, 6, 8, 7, 9, 10, 12]) # 销售额(万美元)
# 进行简单线性回归分析
slope, intercept, r_value, p_value, std_err = linregress(X, Y)
# 输出回归结果
print("斜率:", slope)
print("截距:", intercept)
print("相关系数:", r_value)
print("p值:", p_value)
print("标准误差:", std_err)
# 绘制散点图和回归线
plt.rcParams['font.family']=['STFangsong'] #仿宋字体
plt.scatter(X, Y, label='Data')
plt.plot(X, intercept + slope * X, 'r', label='Fitted line')
plt.xlabel('广告投入(千元)')
plt.ylabel('销售额(万美元)')
plt.legend()
plt.show()
# 使用回归模型预测新数据点的销售额
new_X = 11
predicted_Y = intercept + slope * new_X
print("新数据点(广告投入={}千元)的预测销售额:{:.2f}万美元".format(new_X, predicted_Y))
>>> %Run '简单线性回归.py'
斜率: 1.0333333333333334
截距: 0.9111111111111097
相关系数: 0.9643650760992954
p值: 2.7161855850345658e-05
标准误差: 0.107151675122144
新数据点(广告投入=11千元)的预测销售额:12.28万美元
>>>
4、多元回归 案例
'''
多元回归
在Python中进行多元回归分析可以使用statsmodels库,该库提供了丰富的回归分析功能。
假设我们有一组数据,其中自变量X1表示广告投入(千元),X2表示促销活动次数,因变量Y表示销售额(万美元)。
我们希望通过多元回归分析来建立广告投入和促销活动次数对销售额的影响模型。
在这个案例中,我们使用pandas将数据转换为DataFrame,并使用statsmodels.api中的OLS函数执行多元回归分析。
然后,我们输出回归结果的摘要,包括回归系数、显著性检验、决定系数等。
'''
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 假设数据为 advertising_data
data = {
'advertising': [10, 15, 12, 20, 18, 25, 22, 30, 28, 35, 10, 15, 12, 20, 18, 25, 22, 30, 28, 35],
'promotion': [2, 4, 3, 5, 6, 4, 5, 7, 6, 8, 2, 4, 3, 5, 6, 4, 5, 7, 6, 8],
'sales': [25, 30, 28, 35, 40, 38, 42, 45, 48, 50, 25, 30, 28, 35, 40, 38, 42, 45, 48, 50]
}
advertising_data = pd.DataFrame(data)
# 添加截距项
advertising_data['intercept'] = 1
# 设置自变量和因变量
X = advertising_data[['intercept', 'advertising', 'promotion']]
Y = advertising_data['sales']
# 进行多元回归分析
model = sm.OLS(Y, X).fit()
# 输出回归结果摘要
print(model.summary())
>>> %Run '多元回归.py'
OLS Regression Results
==============================================================================
Dep. Variable: sales R-squared: 0.920
Model: OLS Adj. R-squared: 0.910
Method: Least Squares F-statistic: 97.51
Date: Mon, 24 Jul 2023 Prob (F-statistic): 4.84e-10
Time: 23:39:50 Log-Likelihood: -44.963
No. Observations: 20 AIC: 95.93
Df Residuals: 17 BIC: 98.91
Df Model: 2
Covariance Type: nonrobust
===============================================================================
coef std err t P>|t| [0.025 0.975]
-------------------------------------------------------------------------------
intercept 15.3988 1.725 8.926 0.000 11.759 19.039
advertising 0.6006 0.153 3.929 0.001 0.278 0.923
promotion 1.9576 0.677 2.892 0.010 0.529 3.386
==============================================================================
Omnibus: 3.617 Durbin-Watson: 2.998
Prob(Omnibus): 0.164 Jarque-Bera (JB): 2.403
Skew: 0.669 Prob(JB): 0.301
Kurtosis: 1.954 Cond. No. 73.3
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
>>>