python - 基于更新数据的预测
问题描述
我目前正在从事一个在线广告优化项目。假设我唯一能改变的是 CPC(每次点击费用)。我没有太多数据,因为数据每天只更新一次。我想通过 CPC 获得对 net_income 的预测,并想让程序根据每天更新的数据建议最佳 CPC 值以最大化明天的 net_income。
cpc margin
0 440 -95224.0
1 840 -81620.0
2 530 -57496.0
3 590 -47287.0
4 560 -45681.0
5 590 -52766.0
6 500 -60852.0
7 650 -59653.0
8 480 -48905.0
9 620 -56496.0
10 680 -53614.0
11 590 -44440.0
12 460 -34066.0
13 720 -31086.0
14 590 -23177.0
15 680 -12803.0
16 760 -10625.0
17 590 -20548.0
18 800 -15136.0
19 650 -12804.0
20 420 -63435.0
21 400 -7566.0
22 400 21136.0
23 400 -58585.0
24 400 -14166.0
25 420 -23065.0
26 400 -28533.0
27 380 -14454.0
28 400 -50819.0
29 380 -26356.0
30 400 -26322.0
31 380 -19107.0
32 400 -28270.0
33 380 -88439.0
34 360 -32207.0
35 340 -27632.0
36 340 -18050.0
37 340 -71574.0
38 340 -18050.0
39 320 -20735.0
40 300 -17984.0
41 290 -9426.0
42 280 -16555.0
43 290 2961.0
例如,假设上述数据是df
。
我尝试使用sklearn
并LogisticRegression
获得预测:
import pandas as pd
from sklearn import datasets
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
model = LinearRegression()
model.fit(df['cpc'], df['margin'])
prediction = model.predict([[300]])
print(prediction[0])
保证金是净收入,顺便说一句。
所以通过这样做,我想我可能会根据 CPC 为 300 时的数据得到预测,但它返回一个错误说:
ValueError: Expected 2D array, got 1D array instead:
array=[440 840 530 590 560 590 500 650 480 620 680 590 460 720 590 680 760 590
800 650 420 400 400 400 400 420 400 380 400 380 400 380 400 380 360 340
340 340 340 320 300 290 280 290].
Reshape your data either using array.reshape(-1, 1) if your data has a single feature or array.reshape(1, -1) if it contains a single sample.
我一直在寻找一些使用线性回归模型或逻辑回归模型的示例,但它们都使用二维数组作为输入,这不符合我的需求。我只有一个可以改变的因素,结果就是净收入(或保证金)。
我将如何在我的项目中使用 sklearn?或者有没有其他更好的方法来解决这个问题?
我对编程很陌生,对数学和统计学一无所知,这让我更难理解或学习关键词……请指导我。
- - - - - - - - - - - - - - - - -更新 - - - - - - - - --------------------- 好吧,让我再给你一个df
cpc margin
0 440 -35224.0
1 340 -11574.0
2 380 -68439.0
3 420 -23435.0
4 840 -81620.0
5 400 -38585.0
6 530 -37496.0
7 590 -7287.0
8 560 -5681.0
9 590 -32766.0
10 500 -60852.0
11 400 -30819.0
12 650 -59653.0
13 480 -28905.0
14 620 -56496.0
15 680 -53614.0
16 590 -44440.0
17 460 -14066.0
18 420 16935.0
19 360 -12207.0
20 400 -8533.0
21 400 -6322.0
22 400 25834.0
23 720 -31086.0
24 400 121136.0
25 400 -28270.0
26 340 1950.0
27 340 1950.0
28 300 2016.0
29 340 -27632.0
30 400 32434.0
31 380 -26356.0
32 590 -23177.0
33 680 7197.0
34 320 -20735.0
35 760 9375.0
36 590 -20548.0
37 290 10574.0
38 380 -19107.0
39 290 42961.0
40 280 -16555.0
41 800 -15136.0
42 380 -14454.0
43 650 -12804.0
感谢您的回答,我可以更进一步如下。在我可以无错误地运行我的代码之后,我认为通过循环输入,我将能够获得最佳的 cpc 值。
import pandas as pd
from sklearn import datasets
from sklearn import metrics
from sklearn.linear_model import LogisticRegression
df = pd.DataFrame(final_db)
model = LogisticRegression()
x = df[['cpc']]
model.fit(x, df['margin'])
previous_prediction = -99999999999999
df_prediction = []
for i in list(range(10, 1000, 10)):
prediction = model.predict([[i]])
df_prediction.append({'cpc':i, 'margin' : prediction})
if prediction > previous_prediction:
previous_prediction = prediction
previous_i = i
这不是很令人满意。根据我拥有的数据,有没有更好的模型可以使用?为了实现我的目标,还有其他建议吗?
解决方案
我想它在抱怨这条线
model.fit(df['cpc'], df['margin'])
其中第一个参数应该是二维数组。您可以使用 DataFrame 的数组索引
df[['cpc']]
来获取 DataFrame 而不是系列,这将解决问题
推荐阅读
- java - FirebaseUI RecycleView 搜索不起作用
- spring-batch - 如何停止 Spring Cloud Data Flow 中的任务?
- java - 骆驼 - 伐木后身体变空
- rest - 如何使用linkedin api检索linkedin用户的r_basicprofile权限下列出的所有参数?
- python - 基于模板:使用基于 Slug 的动态 URL 模式通过 Ajax 在 Django 中加载动态内容
- python - 如何将 python eval() 函数用于 tkinter 文本窗口?
- jquery - ajax 搜索引擎不稳定
- apache-kafka - Druid Kafka 摄取的配置
- javascript - 执行php命令后台窗口
- xquery - 路径范围查询在 MarkLogic 中未按预期工作