Pour pratiquer mes compétences en régression, je m’attaque à la compétition Kaggle : “House prices: advanced regression techniques“.
Le jeu est une liste de 79 variables (surfaces, prix, voisinage, état général, etc.) décrivant près de 2000 maisons vendues dans l’Iowa.
Le challenge consiste à construire un modèle permettant de prédire le prix des maisons à partir de ces variables.
Dans la solution que je propose, j’ai comparé différentes méthodes de régression : ridge, lasso, elastic net, gradient boosting, AdaBoost et Huber (régression robuste moins sensible aux outliers).
Pour améliorer le score, j’ai crée un prédicteur d’ensemble. Il consiste à combiner les différents modèles utilisés, et à donner la moyenne (ou la médiane) du prix.
#Construction d'un ensemble de regresseurs def EnsembleRegressor(regressors,X_Validation): EnsemblePred = pd.DataFrame() for reg in regressors: colname = str(reg)[:4] EnsemblePred[colname] = reg.predict(X_Validation) EnsemblePred["Ensemble"] = EnsemblePred.apply(lambda x: np.mean(x), axis=1) EnsemblePred["Ensemble"] = EnsemblePred.apply(lambda x: np.median(x), axis=1) return EnsemblePred
Concernant le pré-processing des données, il reste à faire afin d’améliorer le score, en particulier :
- Mieux cibler la détection d’outliers
- Créer d’autres variables combinées
Cette phase sera étudiée dans un prochain billet. En attendant, le modèle combiné donne un score (RMSE (log(prix)) de 0.12969, ce qui me classe 846/1880 au 06 juillet 2017.
Tous les détails sont dans le notebook jupyter ci-dessous :