案件回顾
时间序列分析
1 2 3 4 5 | import pandas as pd xiaotailang = pd.read_csv( 'xiaotailang.csv' ) xiaotailang.head( 10 ) |
1 2 3 4 5 6 7 8 9 | xiaotailang.date = pd.to_datetime(xiaotailang.date) import matplotlib.pyplot as plt import pylab plt.rcParams[ 'font.sans-serif' ] = [ 'SimHei' ] xiaotailang.index = xiaotailang.iloc[:, 2 ] xiaotailang.iloc[:, 0 ].plot() plt.ylabel( "数额" ) plt.title( "失窃数据" ) pylab.show() |
1 2 3 4 5 6 7 | xiaotailang.iloc[ 0 : 30 , 0 ].plot() plt.ylabel( "数额" ) plt.title( "10月份失窃数据" ) pylab.show() |
从10月份的失窃图可以看出,失窃数额呈现似有似无的周期性波动:1号,15号,29号失窃数额激增,相隔皆为14天,且都是周三,但是10号和23号也出现失窃小高峰。结合周围情况发现,周围有一所学校学生每2周的周三下午不上课,还有一所学校在出现失窃小高峰的日子为学校活动日,下午也不上课,且学校的学生家比较远,寒假春假的时候很难出现在杂货店,因此,初步怀疑两所学校的学生与杂货店失窃有关。
逻辑回归分析再从其他方面进行分析。现在把数据按照损失多和损失少分开,通过计算,失窃数额均值为1000左右,标准差为450左右,根据正态分布性质,平均值左右一个标准差的范围内应包含约68%的数据,因此这里选取1500(1000+450后上取整)当作区分损失多少的标准。下面用周几与活动日的数据进行逻辑回归分析,查看周三和活动日与损失多少是否有关。
逻辑回归只能对数值型变量进行处理,在我们的这个问题中,“活动日”和“周几”均为类型变量,所以要先对数据进行转化。pandas库中的get_dummies函数,可以将列虚拟化。
1 2 3 4 5 6 | import pandas as pd xiaotailang.iloc[:, 3 ] = xiaotailang.iloc[:, 3 ].replace([ 'no' , 'yes' ], [ 1 , 0 ]) day = pd.get_dummies(xiaotailang[ '周几' ]) #列虚拟化,将类型变量转为数值变量 xiaotailang = xiaotailang.iloc[:, 0 : 4 ].join(day) #数据整合 xiaotailang.iloc[:, 4 :] = xiaotailang.iloc[:, 4 :].replace([ 0 , 1 ], [ 1 , 0 ]) xiaotailang.head() |
将虚拟化的数据与原数据中要用的列进行整合,得到如下结果:
01 02 03 04 05 06 07 08 09 10 11 | 数额损失date活动日周一周三周二周五周六周四周日 023621111011111 113150211111101 28090311110111 38160411111011 44000511111110 |
接下来使用statesmodels库中的Logit函数执行逻辑回归,其中“损失”为要预测的变量,“活动日”及周一到周六的数据作为解释变量,为了避免多重共线性,这里不使用“周日”列。
1 2 3 4 5 6 | import statsmodels.api as sm #xiaotailang['intercept'] = 1.0 logit = sm.Logit(xiaotailang.iloc[:, 1 ], xiaotailang.iloc[:, 3 : 10 ]) # 拟合模型 result = logit.fit() result.summary() |
得到的结果如下:
01 02 03 04 05 06 07 08 09 10 11 | Optimization terminated successfully. Current function value: 0.313466 Iterations 8 coefstd errzP>|z|[ 0.0250 . 975 ] 活动日 - 2.10620 . 698 - 3.0170 . 003 - 3.475 - 0.738 周一 1.43160 . 9941.4400 . 150 - 0.5163 . 379 周三 - 2.23140 . 430 - 5.1890 . 000 - 3.074 - 1.389 周二 0.48720 . 6890.7070 . 480 - 0.8641 . 838 周五 - 0.28700 . 558 - 0.5150 . 607 - 1.3800 . 806 周六 0.51950 . 7130.7290 . 466 - 0.8781 . 916 周四 - 0.28700 . 558 - 0.5150 . 607 - 1.3800 . 806 |
从结果显示,周三和活动日的P值<0.005,否定原假设,即认为与要预测的变量“损失”有关。从对已有数据进行分析的结果显示,两所学校的学生与杂货店失窃有关,但这个判断结果只是根据手头数据得到的,可能存在某盗窃团伙专门在隔周的周三作案但是我们不知道,也就是说解释变量一开始就选错了,因此解释变量的选择对结果有很大影响。
几个小概念逻辑回归:算法简单和高效,在实际中应用非常广泛。将普通回归函数,经Sigmoid函数,把输出压缩到[0,1]。当用逻辑回归做分类问题时,通常针对二分类问题,即结果是二选一的数据。
来源:CSDN
作者:xiaoyaGrace
链接:https://blog.csdn.net/xiaoyaGrace/article/details/103238847