Python StatsModels OLS输出中的折叠分类特征级别

时间:2018-12-10 22:55:32

标签: python pandas regression statsmodels

我正在尝试创建多元线性回归模型以进行预测 使用statsmodels用Python对客人给酒店的评分(Reviewer_Score)。

Review_Total_Negative_Word_Counts 是他们对酒店的负面评论持续了多长时间

总评论数是酒店的评论数

Review_Total_Positive_Word_Counts 是他们对酒店的正面评价持续了多长时间

评论总数_Revewier_Has_Given 是该访客在网站上给出的评论数

态度是一个类别变量:良好或不良

原因是造访的原因(休闲或商务)

大陆是客人来自的大陆(多个级别)

单人是旅行者是单身旅行者(“是”还是“否”)

季节是客人在哪个季节住宿的酒店(“秋季”,“冬季”,“夏季”,“春季”)

如您所见,我具有一些数字和分类特征。

到目前为止,我的代码是:

import statsmodels.formula.api as smf

lm = smf.ols(formula = 'Reviewer_Score ~ Review_Total_Negative_Word_Counts + Total_Number_of_Reviews + Review_Total_Positive_Word_Counts + Total_Number_of_Reviews_Reviewer_Has_Given + Attitude + Reason + Continent + Solo + Season', data = Hotel).fit()

lm.params

lm.summary()

我的问题是,当我同时查看参数(斜率和截距估计值)以及P值时,它们看起来像:

enter image description here

enter image description here

每个分类特征的级别都包括在内,我只想有一个输出,向我们显示数字和分类特征的斜率和p值(而不是分类特征中每个级别的斜率和p值) !)

基本上,我希望输出的斜率如下:

拦截

评论总数

Review_Total_Positive_Word_Counts

评论总数(Revewier_Has_Given)

态度

原因

大陆

独奏

季节

我该怎么做才能折叠级别并仅显示每个变量的显着性和斜率值?

1 个答案:

答案 0 :(得分:0)

现在,您对模型的每个原始输入都将转换为虚拟变量。*

我怀疑这与您的期望相矛盾的原因是,您在模型中将三种类型的变量称为分类变量:

  1. 临时(“季节”)
  2. 二进制(“态度”,“原因”,“独奏”)
  3. 类别(“大陆”)

只有Continent才是真正的非二进制分类,因为没有任何其他信息就无法在层次结构中对各大陆进行排序。对于“ Season”,模型/程序没有指示只有四个季节,或者它们以时间顺序出现。对于二进制变量,类似地,它也不知道只有两个可能的值。

我建议将二进制变量转换为10Nan(您可以先使用lambda函数,然后再使用pd.fillna())。

对于“季节”,听起来您想要更类似于“一年中的时间,以季节/季度表示”。我会将季节映射到1,2,34

对于“大陆”,您可以按每个洲的评论数量对各大洲进行排名,然后将各大洲转换为其各自的排名...但是您可能会在类似于“大陆”的混合体上回归+“来自起源大陆的人口”。 (当然,这样做可能很有用)。或者,您可以保留已经使用的伪变量编码。

或者,您可以为该大陆提供一个随机映射,但是另外还包括每个大陆相对人口的一些指标。

*要对此进行明确说明,可以使用pd.get_dummmies()