#python #data-science #prediction #glm #poisson
#python #наука о данных #прогнозирование #glm #poisson
Вопрос:
Я провожу тематическое исследование, в котором я должен предсказать номер заявки для каждой политики. Поскольку моя переменная ClaimNb не является двоичной, я не могу использовать логистическую регрессию, но я должен использовать Пуассона. Мой код для модели GLM:
import statsmodels.api as sm
import statsmodels.formula.api as smf
formula= 'ClaimNb ~ BonusMalus VehAge Freq VehGas Exposure VehPower Density DrivAge'
model = smf.glm(formula = formula, data=df,
family=sm.families.Poisson())
Я также разделил свои данные
# train-test-split
train , test = train_test_split(data,test_size=0.2,random_state=0)
# seperate the target and independent variable
train_x = train.drop(columns=['ClaimNb'],axis=1)
train_y = train['ClaimNb']
test_x = test.drop(columns=['ClaimNb'],axis=1)
test_y = test['ClaimNb']
Моя проблема сейчас заключается в прогнозировании, я использовал следующее, но не сработало:
from sklearn.linear_model import PoissonRegressor model = PoissonRegressor(alpha=1e-3, max_iter=1000)
model.fit(train_x,train_y)
predict = model.predict(test_x)
Пожалуйста, есть ли какой-либо другой способ предсказать и проверить точность модели?
Спасибо
Ответ №1:
Вам нужно назначить model.fit() и прогнозировать с этим, это отличается от sklearn. Кроме того, если вы используете формулу, лучше разделить ваш фрейм данных на обучающий и тестовый, прогнозируйте, используя это. Например:
import statsmodels.api as sm
import statsmodels.formula.api as smf
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randint(0,100,(50,4)),columns=['ClaimNb','BonusMalus','VehAge','Freq'])
#X = df[['BonusMalus','VehAge','Freq']]
#y = df['ClaimNb']
df_train = df.sample(round(len(df)*0.8))
df_test = df.drop(df_train.index)
formula= 'ClaimNb ~ BonusMalus VehAge Freq'
model = smf.glm(formula = formula, data=df,family=sm.families.Poisson())
result = model.fit()
И мы можем сделать прогноз:
result.predict(df_train)
Или:
result.predict(df_test)
Комментарии:
1. Спасибо. Итак, если я понимаю, это не похоже на R, где вы можете создавать новые столбцы с claim_estimated ?
2. вы можете добавить его в свой тестовый фрейм данных, например
df_test['pred'] = result.predict(df_test)
3. и как сгруппировать его по политике?
4. я не уверен, что вы имеете в виду. похоже, это новый вопрос. можете ли вы опубликовать его за пределами этого?
5. на самом деле это то же самое, что и в моем заголовке, предсказывающем количество заявок на политику. как только у нас будет предсказанная переменная, и мы добавим ее в фрейм данных, она должна быть сгруппирована по политике, например, политика 1: claimnb= 2 predictedclaim = 1