Regressão Linear Simples - Trabalho

Estudo de caso: Seguro de automóvel sueco

Agora, sabemos como implementar um modelo de regressão linear simples. Vamos aplicá-lo ao conjunto de dados do seguro de automóveis sueco. Esta seção assume que você baixou o conjunto de dados para o arquivo insurance.csv, o qual está disponível no notebook respectivo.

O conjunto de dados envolve a previsão do pagamento total de todas as reclamações em milhares de Kronor sueco, dado o número total de reclamações. É um dataset composto por 63 observações com 1 variável de entrada e 1 variável de saída. Os nomes das variáveis são os seguintes:

  1. Número de reivindicações.
  2. Pagamento total para todas as reclamações em milhares de Kronor sueco.

Voce deve adicionar algumas funções acessórias à regressão linear simples. Especificamente, uma função para carregar o arquivo CSV chamado load_csv (), uma função para converter um conjunto de dados carregado para números chamado str_column_to_float (), uma função para avaliar um algoritmo usando um conjunto de treino e teste chamado split_train_split (), a função para calcular RMSE chamado rmse_metric () e uma função para avaliar um algoritmo chamado evaluate_algorithm().

Utilize um conjunto de dados de treinamento de 60% dos dados para preparar o modelo. As previsões devem ser feitas nos restantes 40%.

Compare a performabce do seu algoritmo com o algoritmo baseline, o qual utiliza a média dos pagamentos realizados para realizar a predição ( a média é 72,251 mil Kronor).


In [27]:
import pandas as pd

df = pd.read_csv("insurance.csv", header=None, names=['r', 'p'])
df.head()


Out[27]:
r p
0 108 392.5
1 19 46.2
2 13 15.7
3 124 422.2
4 40 119.4

Baseline model


In [42]:
from sklearn.dummy import DummyRegressor
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import ShuffleSplit

dm = DummyRegressor()
param_grid = {"strategy": ["mean", "median"]}
ss = ShuffleSplit(n_splits=1, test_size=.4, random_state=100)

cv = GridSearchCV(dm, cv=ss, param_grid=param_grid, scoring="neg_mean_squared_error")
cv.fit(df[['r']], df['p'])

cv.best_score_ * -1


Out[42]:
8787.5998097994034

In [43]:
cv.best_params_


Out[43]:
{'strategy': 'mean'}

Linear Regression Model


In [47]:
from sklearn.linear_model import LinearRegression
import math

ln = LinearRegression()

cv = GridSearchCV(ln, param_grid = {}, cv=ss, scoring="neg_mean_squared_error")
cv.fit(df[['r']], df['p'])

math.sqrt(cv.best_score_ * -1)


Out[47]:
38.444601597758144