当前位置:首页 > 运营 > 正文

数据分析实战如何将统计学模型(线性回归)运用到实际案例

做了一段时间分析后,你是否会感觉分析结果还停留在数据表面现象,如果你和我有同感,请耐心读完本篇文章,会受益匪浅。接下来一段时间,本人也会深入研究统计学方面的知识。因为学了统计学,你会发现很多时候的分析并不靠谱。比如很多人都喜欢用平均数去分析一个事物的结果,但是这往往是粗糙的,不准确的。如果学了统计学,那么我们就能以更多更科学的角度看待数据。更深层次的挖掘出数据背后的价值!统计学是数据分析的基石。

本文通过使用 Python Pandas Statsmodels 建立简单一元线性回归模型、多元线性回归模型来预测世界幸福指数。通过一个实际的案例,了解使用线性回归建模的过程,测试、分析。

一、项目背景

《世界幸福指数报告》是对全球幸福状况的一次具有里程碑意义的调查。

民意测验机构盖洛普从 2012 年起,每年都会在联合国计划下发布《世界幸福指数报告》,报告会综合两年内 150 多个国家的国民对其所处社会、城市和自然环境等因素进行评价后,再根据他们所感知的幸福程度对国家进行排名。

《世界幸福指数报告》的编撰主要依赖于对 150 多个国家的 1000 多人提出一个简单的主观性问题:“如果有一个从 0 分到 10 分的阶梯,顶层的 10 分代表你可能得到的最佳生活,底层的 0 分代表你可能得到的最差生活。你觉得你现在在哪一层?”

那么哪个国家在总体幸福指数上排名最高?哪些因素对幸福指数的影响最大?今天我们就用 Python Pandas Statsmodels 来聊一聊。

二、数据集说明rank:幸福指数排名region:国家happiness:幸福指数得分gdp_per_capita:GDP(人均国内生产总值)healthy_life_expectancy:健康预期寿命freedom_to_life_choise:自由权generosity:慷慨程度year:年份corruption_perceptions:清廉指数social_support:社会支持(客观上物质上的援助和直接服务;主观上指个体感到在社会中被尊重、被支持和被理解的情绪体验和满意程度。)

二、什么是线性回归?

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。

三、变量选择

【因变量】 我们选择 happiness(幸福指数) 作为因变量,该变量度量了各个国家的幸福指数。【自变量】我们选择了影响幸福的六个因素,比如 GDP、健康预期寿命、自由权、慷慨程度、清廉指数、社会支持。

四、 数据导入和数据整理

import pandas as pd import numpy as np # 可视化import matplotlib.pyplot as plt import seaborn as sns import plotly as py import plotly.graph_objs as go import plotly.express as px from plotly.offline import init_notebook_mode, iplot, plot init_notebook_mode(connected=True)plt.style.use('seaborn')# 读入数据df_2015 = pd.read_csv('./deal_data/2015.csv')df_2016 = pd.read_csv('./deal_data/2016.csv')df_2017 = pd.read_csv('./deal_data/2017.csv')df_2018 = pd.read_csv('./deal_data/2018.csv') df_2019 = pd.read_csv('./deal_data/2019.csv')# 新增列-年份df_2015["year"] = str(2015)df_2016["year"] = str(2016)df_2017["year"] = str(2017)df_2018["year"] = str(2018)df_2019["year"] = str(2019)# 合并数据df_all = df_2015.append([df_2016, df_2017, df_2018, df_2019], sort=False)df_all.drop('Unnamed: 0', axis=1, inplace=True)df_all.head()

数据分析实战如何将统计学模型(线性回归)运用到实际案例  第1张

五、数据可视化1、2019 世界幸福地图

data = dict(type = 'choropleth', locations = df_2019['region'], locationmode = 'country names', colorscale = 'RdYlGn', z = df_2019['happiness'], text = df_2019['region'], colorbar = {'title':'Happiness'})layout = dict(title = 'Geographical Visualization of Happiness Score in 2019', geo = dict(showframe = True, projection = {'type': 'azimuthal equal area'}))choromap3 = go.Figure(data = [data], layout=layout)plot(choromap3, filename='./html/世界幸福地图.html')

数据分析实战如何将统计学模型(线性回归)运用到实际案例  第2张

结论:健康预期寿命与幸福得分呈高度线性正相关关系,健康预期寿命越高的国家,幸福水平相对越高。

③动态图展示(GDP&happiness)

fig = px.scatter(df_all, x='healthy_life_expectancy', y='happiness', animation_frame='year', animation_group='region', size='rank', color='region', hover_name='region', trendline='ols' ) fig.update_layout(title_text='Happiness Rank vs healthy_life_expectancy') plot(fig, filename='./html/健康预期寿命和幸福水平动态图展示.html')

数据分析实战如何将统计学模型(线性回归)运用到实际案例  第3张

五、数据建模

我们使用线性回归进行建立一个基准模型,首先筛选一下建模变量,并删除空值记录。

from statsmodels.formula.api import olssel_cols = ['happiness', 'gdp_per_capita', 'healthy_life_expectancy', 'freedom_to_life_choise', 'corruption_perceptions', 'generosity']# 重置索引df_model.index = range(df_model.shape[0])df_model = df_all[sel_cols] # 删除空值df_model = df_model.dropna() df_model.head()

1、ols 最小二乘法

本文使用最小二乘法来建模,它是很基础、很强大的方法,应用非常广泛。

最小二乘法通过使得因变量观测值与因变量估计值之间的残差平方和达到最小的方法,得到估计的回归方程。最小二乘准则就是选择能与样本数据有最佳拟合方程的准则。

最小二乘法建立在假定之上,如果假设成立,建立的模型可以用来较准确地预测数据。反之,假设不成立,模型论断将失去其有效性。

最小二乘法假定:

1)线性关系:假定因变量与自变量之间存在线性关系。如果不存在线性关系,线性回归不是解释数据的正确模型。

2)无多重共线性:因变量之间不存在相关性。如果某些因变量之间存在密切联系,可以尝试删去其中一个或多个相关的因变量。因为多余的因变量提供了冗余信息,剔除多余变量并不会大大降低修正判定系数。

3)零条件均值假定:观测值和线性拟合估计值之间的平均残差为 0。有时候观测值和估计值相比,偏大;有时候偏小,但之间的残差不会无控制地偏向于一群值。

4)同方差:对于自变量的不同取值,因变量的误差项都是独立的,方差是相同的。

5)无自相关性 / 序列相关:自相关是指一个变量同自身其他观测值有相互关系。比如,如果今天的股票价格影响着明天的股票价格,那么股票价格就是序列相关的。

2、简单线性回归回归模型

简单线性回归使用一个自变量来预测一个因变量,二者之间的关系可以用一条直线近似表示。

简单线性回归模型:

数据分析实战如何将统计学模型(线性回归)运用到实际案例  第4张

参考文献:

CDA 数据分析师 :https://www.sohu.com/a/419787355_568359

取消
扫码支持 支付码