Python 使用星期几、每天小时数和媒体类型创建回归模型?

Python 使用星期几、每天小时数和媒体类型创建回归模型?,python,regression,categorical-data,dummy-variable,Python,Regression,Categorical Data,Dummy Variable,在Jupyter笔记本中使用Python 3。我正在尝试创建一个回归模型方程?将Eng预测为跟随者变量的百分比。我会得到媒体类型、创建时间和工作日。这些都应被视为分类变量 这是我过去的一些数据 Media Type Eng as % of Followers Hour Created Day of Week 0 Video 0.0136 23 Tuesday 1 Video 0.0163 22 Wednesday 2 Video 0.0163

在Jupyter笔记本中使用Python 3。我正在尝试创建一个回归模型方程?将Eng预测为跟随者变量的百分比。我会得到媒体类型、创建时间和工作日。这些都应被视为分类变量

这是我过去的一些数据

    Media Type  Eng as % of Followers   Hour Created    Day of Week
0   Video   0.0136  23  Tuesday
1   Video   0.0163  22  Wednesday
2   Video   0.0163  22  Tuesday
3   Video   0.0196  22  Friday
4   Video   0.0179  20  Thursday
5   Photo   0.0087  14  Wednesday
我已经使用pd.get_虚拟变量创建了虚拟变量,但我不确定我是否正确创建了它-问题具体在于创建的小时变量。它们是数字,但我希望它们被视为类别。例如,22小时可能会提高性能,但这并不意味着21小时或23小时

我也很好奇,如果我能在一周中的一天和一小时之间的互动中创建我的模型因子,也许22小时在大多数日子里是一个提升,但是22星期五会导致一个下降,就像我在patsy身上看到的那样。。。但那可能是我变得贪婪了

下面是我如何创建虚拟变量的过程,这为我将小时创建为定量变量而不是定性变量的问题奠定了基础。另外,我现在使用的Vars数据框架没有我想要预测的东西。这可能是对的吗

Vars = Training[['Hour Created','Day of Week','Media Type']]
Result = Training['Eng as % of Followers']
Vars = pd.get_dummies(data=Vars, drop_first=True)
如果有人能帮助解决这个小时产生的问题,那将是一个很好的开始。。。。然后,不知道从那里去哪里。我见过人们在这种情况下使用ols函数。或sklearn的线性_模型。我正在努力解释这两种方法的结果,尤其是如何将这3个自变量的数据框插入到模型中。如果有人能提个建议,我会尽力去做

编辑: 包括我尝试创建此模型的几种方法。这是第一个问题,我假设我的小时数据使用不正确。由于我传递到其中的数据帧甚至没有Eng作为列标题的跟随者百分比,我甚至不确定它试图预测什么

Vars_train, Vars_test, Result_train, Result_test = train_test_split(Vars, Result, test_size = .20, random_state = 40)
regr = linear_model.LinearRegression() 
regr.fit(Vars_train, Result_train)
predicted = regr.predict(Vars_test)
当我尝试如下使用ols方法时,我得到一个无效的语法错误。我试过不同的变体,但都没用

fit1 = ols('Eng as % of Followers ~ C(Day of Week) + C(Hour Created) + C(Media Type)', data=Training).fit() 
确保正确进行伪编码的一种方法是将列转换为str类型。在您的情况下,您希望将创建的小时看作是分类的,虽然它本质上是数字的,所以在进行虚拟编码之前最好将其转换为字符串。 为了捕获一周中的一天和创建的一小时之间的交互,请执行功能工程,并通过将创建的一周中的一天和一小时相乘来创建您自己的功能,并将其作为输入提供给您的模型

为了理解/解释您的模型,您可以查看不同特征的权重/系数,从而了解每个特征对目标变量的正面或负面影响

当然,这里的结果可能不是很有趣,因为我只处理了6个数据点

回答你的问题

您可以使用reg.intercept查找y_截距_

是的,您可以插入x的新值,并使用reg.predictx获得目标变量,其中x是您的新输入

OLS和sklearn所做的回归是一个整体。OLS不过是解决回归优化问题的一种方法

希望这有帮助

确保正确进行伪编码的一种方法是将列转换为str类型。在您的情况下,您希望将创建的小时看作是分类的,虽然它本质上是数字的,所以在进行虚拟编码之前最好将其转换为字符串。 为了捕获一周中的一天和创建的一小时之间的交互,请执行功能工程,并通过将创建的一周中的一天和一小时相乘来创建您自己的功能,并将其作为输入提供给您的模型

为了理解/解释您的模型,您可以查看不同特征的权重/系数,从而了解每个特征对目标变量的正面或负面影响

当然,这里的结果可能不是很有趣,因为我只处理了6个数据点

回答你的问题

您可以使用reg.intercept查找y_截距_

是的,您可以插入x的新值,并使用reg.predictx获得目标变量,其中x是您的新输入

OLS和sklearn所做的回归是一个整体。OLS不过是解决回归优化问题的一种方法


希望这有帮助

您使用的是Python2还是Python3?另外,请粘贴您收到的完整错误消息。Python 3。已编辑。请复制并粘贴完整的错误消息。您使用的是Python 2还是Python 3?另外,请粘贴您收到的完整错误消息。Python 3。已编辑。请复制并粘贴完整的错误消息。非常感谢!不过,有几件事让我迷路了。1在哪里可以找到回归公式的y截距?2然后我能将值插入到这个r中吗
用回归模型预测新的啮合值百分比?3如果这与OLS方法有什么不同的话——你知道为什么我的问题细节中的执行没有执行吗?错误内容为:文件,第1行CHour Created ^SyntaxError:invalid Syntaxy如果您认为上述答案回答了您的问题,我请求您将其作为已验证的答案接受,以便它可以帮助其他可能访问此问题的人。非常感谢!不过,有几件事让我迷路了。1在哪里可以找到回归公式的y截距?2然后我是否能够将值插入该回归模型中,以预测新的%的参与值?3如果这与OLS方法有什么不同的话——你知道为什么我的问题细节中的执行没有执行吗?错误内容为:文件,第1行CHour Created ^SyntaxError:invalid Syntax如果您认为上述答案回答了您的问题,我请求您将其作为已验证的答案接受,以便它可以帮助其他可能访问此问题的人。
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

df 

Media   Type    Eng_as_%_of_Followers   Hour_Created    Day_of_Week
0   0   Video   0.0136                  23              Tuesday
1   1   Video   0.0163                  22              Wednesday
2   2   Video   0.0163                  22              Tuesday
3   3   Video   0.0196                  22              Friday
4   4   Video   0.0179                  20              Thursday
5   5   Photo   0.0087                  14              Wednesday 

df["Hour_Created"] = df["Hour_Created"].astype(str)
df["Interaction"] = df["Hour_Created"] + "_" +df["Day_of_Week"] 

X = df.drop("Eng_as_%_of_Followers", axis=1)
Y = df["Eng_as_%_of_Followers"]

X_encoded = pd.get_dummies(X)

X_train, X_test, y_train, y_test = train_test_split(
    X_encoded, Y, test_size=0.33, random_state=42)

reg = LinearRegression().fit(X_train, y_train)

coef_dict = dict(zip(X_encoded.columns, reg.coef_))

coef_dict

{'Day_of_Week_Friday': 0.0012837455830388678,
 'Day_of_Week_Thursday': 0.0007424028268551229,
 'Day_of_Week_Tuesday': -0.0008084805653710235,
 'Day_of_Week_Wednesday': -0.0012176678445229678,
 'Hour_Created_14': -0.0012176678445229678,
 'Hour_Created_20': 0.0007424028268551229,
 'Hour_Created_22': 0.0004752650176678456,
 'Hour_Created_23': 0.0,
 'Interaction_14_Wednesday': -0.0012176678445229678,
 'Interaction_20_Thursday': 0.0007424028268551229,
 'Interaction_22_Friday': 0.0012837455830388678,
 'Interaction_22_Tuesday': -0.0008084805653710235,
 'Interaction_22_Wednesday': 0.0,
 'Interaction_23_Tuesday': 0.0,
 'Media': -0.0008844522968197866,
 'Type_Photo': -0.0012176678445229708,
 'Type_Video': 0.0012176678445229685}