Dans le domaine de l'apprentissage automatique et de la science des données, l'ingénierie des fonctionnalités est la pierre angulaire de l'amélioration des performances des modèles. Alors que les algorithmes et les modèles attirent souvent l'attention, ce sont les fonctionnalités soigneusement conçues qui jettent les bases de la puissance prédictive. Imaginez que vous essayez de construire une maison sur des fondations faibles - sans fonctionnalités solides, même les algorithmes les plus avancés peuvent s'effondrer face à des ensembles de données complexes.
L'ingénierie des fonctionnalités est le processus créatif et stratégique de sélection, de transformation et de création de fonctionnalités (variables d'entrée) à partir de données brutes afin de maximiser les performances d'un modèle. C'est l'art de convertir les données en informations exploitables, en donnant aux machines la compréhension contextuelle dont elles ont besoin pour faire des prédictions précises. Qu'il s'agisse de prévoir les prix des logements, de classer les préférences des clients ou de diagnostiquer des conditions médicales, l'ingénierie des fonctionnalités détient la clé pour libérer le potentiel caché dans vos données.
Imaginez que vous êtes chargé de prédire les prix des maisons en fonction de divers facteurs. Vous pourriez d'abord être attiré par les caractéristiques évidentes telles que la superficie en pieds carrés, le nombre de chambres et l'emplacement. Cependant, la magie de l'ingénierie des fonctionnalités réside dans la découverte des aspects les plus subtils qui influencent la variable cible. Le rapport entre les salles de bains et les chambres a-t-il un impact sur le prix ? Qu'en est-il de la présence d'une cheminée ou de l'âge de la toiture ?
L'ingénierie des fonctionnalités ne consiste pas simplement à créer davantage de fonctionnalités ; il s'agit de discerner quelles facettes des données comptent vraiment. Ce processus nécessite souvent une connaissance du domaine, de la créativité et une compréhension approfondie du problème auquel vous vous attaquez. En affinant les fonctionnalités existantes et en en créant de nouvelles, vous apprenez essentiellement à votre modèle à comprendre les données comme un expert.
La réponse réside dans les performances du modèle. Des fonctionnalités bien conçues peuvent conduire à une convergence plus rapide pendant l'entraînement, à une réduction du surajustement et, en fin de compte, à des prédictions plus précises. Un modèle d'apprentissage automatique est aussi bon que les données qu'il alimente, et des fonctionnalités bien conçues fournissent une représentation plus riche et plus nuancée de ces données.
Dans cet article, nous plongerons dans le monde de l'ingénierie des fonctionnalités à l'aide de l'ensemble de données avancé de prévision du prix des logements de Kaggle. En suivant le cours, vous découvrirez diverses techniques qui peuvent transformer les données brutes en précieux prédicteurs et vous verrez comment les résultats de votre modèle s'améliorent en appliquant différentes méthodes d'ingénierie de caractéristiques.
Alors, sans perdre de temps, commençons à découvrir les différentes méthodes d'ingénierie des fonctionnalités.
Maintenant que nous avons préparé le terrain, il est temps de plonger dans le monde passionnant des techniques avancées d'ingénierie des fonctionnalités. Dans cette section, je vais vous guider pas à pas dans la mise en œuvre de quatre méthodes puissantes qui peuvent booster vos modèles prédictifs. Chaque méthode sert un objectif unique, offrant des informations et des améliorations qui peuvent faire une différence substantielle dans les performances de votre modèle.
Imaginez pouvoir sélectionner les caractéristiques les plus influentes pour votre modèle avec une précision chirurgicale. L'information mutuelle vous permet d'atteindre cet objectif. En quantifiant la relation entre chaque caractéristique et la variable cible, vous pouvez identifier les facteurs clés qui ont un impact sur vos prédictions. Nous vous guiderons à travers le code et fournirons une explication détaillée de chaque étape, vous aidant à maîtriser cette technique perspicace.
Les clusters cachent souvent des modèles précieux dans vos données. Avec le clustering, vous pouvez découvrir ces joyaux cachés et les exploiter pour améliorer la compréhension de votre modèle. Je vais vous guider tout au long du processus d'application du clustering KMeans pour regrouper des instances similaires. Vous apprendrez à créer de nouvelles fonctionnalités basées sur ces clusters et à observer leur impact sur les performances du modèle.
Les données de grande dimension peuvent être écrasantes, mais l'analyse en composantes principales (ACP) offre une solution. En identifiant les dimensions les plus influentes, vous pouvez réduire la complexité sans sacrifier le pouvoir prédictif. Ce didacticiel vous guidera tout au long de la transformation de vos données à l'aide de l'ACP, en vous expliquant comment cette technique peut rationaliser votre modèle tout en conservant sa précision.
En plus de ces méthodes, je vais également vous présenter les transformations mathématiques , une technique souvent négligée qui peut produire des résultats puissants. En appliquant des opérations mathématiques aux colonnes sélectionnées, vous pouvez façonner vos données pour mieux les aligner sur les hypothèses de votre modèle. Vous explorerez les transformations logarithmique, racine carrée et inverse, illustrant comment elles peuvent révéler des relations cachées et améliorer la précision de votre modèle.
Tout au long de cette section, je vous proposerai des explications complètes pour vous assurer non seulement de saisir les aspects techniques, mais aussi de comprendre le raisonnement derrière l'application de chaque méthode. À la fin, vous aurez acquis une boîte à outils précieuse de techniques d'ingénierie de fonctionnalités avancées qui peuvent être appliquées en toute confiance pour améliorer vos modèles prédictifs dans divers scénarios.
Êtes-vous prêt à explorer les subtilités de chaque méthode, à découvrir leur potentiel et à vous doter de l'expertise nécessaire pour concevoir des fonctionnalités qui se traduisent par des modèles prédictifs plus précis et plus puissants ? Commençons ce voyage éclairant!
Commençons par importer tous les packages dont vous avez besoin.
import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error from sklearn.feature_selection import SelectKBest, mutual_info_regression from sklearn.cluster import KMeans from sklearn.decomposition import PCA from sklearn.preprocessing import LabelEncoder, StandardScaler import numpy as np
Maintenant, récupérons l'ensemble de données de kaggle et prétraitons-le.
# Load the dataset data = pd.read_csv('train.csv') # Data preprocessing def preprocess_data(df): # Handle missing values df = df.fillna(df.median()) # Handle categorical variables df = pd.get_dummies(df, drop_first=True) return df data = preprocess_data(data) # Prepare the data X = data.drop('SalePrice', axis=1) y = data['SalePrice'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
Pour commencer, exécutons un modèle de référence sans aucune ingénierie de fonctionnalités et évaluons sa précision. Après cela, nous appliquerons chacune des quatre méthodes d'ingénierie des caractéristiques (information mutuelle, regroupement, réduction de la dimensionnalité PCA et codage des étiquettes) individuellement et comparerons leurs effets sur les performances du modèle.
Avant d'appliquer toute ingénierie de fonctionnalités, nous commencerons par un modèle de base. Ici, nous utiliserons un modèle de régression linéaire simple pour prédire les prix des logements à l'aide de l'ensemble de données d'origine.
baseline_model = LinearRegression() baseline_model.fit(X_train, y_train) baseline_predictions = baseline_model.predict(X_test) baseline_rmse = mean_squared_error(y_test, baseline_predictions, squared=False) print(f"Baseline RMSE: {baseline_rmse}") # ------------------ OUTPUT ---------------- # Baseline RMSE: 49204.92
Dans le modèle de référence, vous commencez avec un modèle de régression linéaire simple qui utilise les fonctionnalités d'origine telles qu'elles sont. Vous formez le modèle à l'aide des données de formation, faites des prédictions sur les données de test et calculez l'erreur quadratique moyenne (RMSE) pour mesurer les performances du modèle sur des données invisibles.
# Method 1: Mutual Information mi_selector = SelectKBest(score_func=mutual_info_regression, k=10) X_train_mi = mi_selector.fit_transform(X_train, y_train) X_test_mi = mi_selector.transform(X_test) mi_model = LinearRegression() mi_model.fit(X_train_mi, y_train) mi_predictions = mi_model.predict(X_test_mi) mi_rmse = mean_squared_error(y_test, mi_predictions, squared=False) print(f"Mutual Information RMSE: {mi_rmse}") # ------------------ OUTPUT ----------------- # Mutual Information RMSE: 39410.99
Ici, vous explorez les informations que chaque fonctionnalité fournit sur la variable cible. Vous sélectionnez les 10 principales fonctionnalités qui ont les scores d'informations mutuelles les plus élevés avec la cible. Ensuite, vous entraînez un nouveau modèle de régression linéaire en utilisant uniquement ces fonctionnalités sélectionnées. Cela permet de garantir que votre modèle se concentre sur les fonctionnalités les plus informatives, et vous calculez la RMSE pour voir comment les prédictions de ce modèle se comparent à la ligne de base.
# Method 2: Clustering num_clusters = 5 kmeans = KMeans(n_clusters=num_clusters, random_state=42) X_clustered = X.copy() X_clustered['Cluster'] = kmeans.fit_predict(X) X_clustered = pd.get_dummies(X_clustered, columns=['Cluster'], prefix='Cluster') X_train_clustered, X_test_clustered, _, _ = train_test_split(X_clustered, y, test_size=0.2, random_state=42) cluster_model = LinearRegression() cluster_model.fit(X_train_clustered, y_train) cluster_predictions = cluster_model.predict(X_test_clustered) cluster_rmse = mean_squared_error(y_test, cluster_predictions, squared=False) print(f"Clustering RMSE: {cluster_rmse}") # ------------------- OUTPUT -------------- # Clustering RMSE: 47715.30
Vous envisagez de regrouper des instances similaires dans vos données à l'aide du clustering. Plus précisément, vous utilisez l'algorithme KMeans pour diviser vos données en clusters. Chaque instance est affectée à un cluster et vous ajoutez ces informations de cluster en tant que nouvelle fonctionnalité catégorielle. En faisant cela, vous donnez au modèle un moyen de considérer les relations entre les instances en termes de leurs clusters. Après avoir formé un modèle de régression linéaire sur ces données groupées, vous calculez la RMSE pour évaluer ses performances.
# Method 3: PCA Dimensionality Reduction scaler = StandardScaler() X_scaled = scaler.fit_transform(X_train) pca = PCA(n_components=10) X_train_pca = pca.fit_transform(X_scaled) X_test_pca = pca.transform(scaler.transform(X_test)) pca_model = LinearRegression() pca_model.fit(X_train_pca, y_train) pca_predictions = pca_model.predict(X_test_pca) pca_rmse = mean_squared_error(y_test, pca_predictions, squared=False) print(f"PCA RMSE: {pca_rmse}") # --------------- OUTPUT -------------- # PCA RMSE: 40055.78
PCA vous aide à réduire la complexité de vos données en les résumant en moins de dimensions. Vous normalisez vos données pour vous assurer que toutes les fonctionnalités sont à la même échelle. Ensuite, vous utilisez l'ACP pour identifier les modèles les plus importants dans vos données et réduire le nombre de caractéristiques à 10 composants principaux. En formant un modèle de régression linéaire sur ces composants, vous êtes en mesure de capturer les informations les plus importantes tout en simplifiant le modèle. Le RMSE vous aide à évaluer si cette approche est efficace.
# Method 5: Mathematical Transformations X_train_transformed = X_train.copy() X_test_transformed = X_test.copy() # Apply logarithmic transformation log_columns = ['GrLivArea', 'LotArea'] # Specify columns to apply log transformation X_train_transformed[log_columns] = np.log1p(X_train_transformed[log_columns]) X_test_transformed[log_columns] = np.log1p(X_test_transformed[log_columns]) # Apply square root transformation sqrt_columns = ['GarageArea', '1stFlrSF'] # Specify columns to apply square root transformation X_train_transformed[sqrt_columns] = np.sqrt(X_train_transformed[sqrt_columns]) X_test_transformed[sqrt_columns] = np.sqrt(X_test_transformed[sqrt_columns]) # Apply inverse transformation inv_columns = ['YearBuilt', 'OverallQual'] # Specify columns to apply inverse transformation X_train_transformed[inv_columns] = 1 / X_train_transformed[inv_columns] X_test_transformed[inv_columns] = 1 / X_test_transformed[inv_columns] math_transform_model = LinearRegression() math_transform_model.fit(X_train_transformed, y_train) math_transform_predictions = math_transform_model.predict(X_test_transformed) math_transform_rmse = mean_squared_error(y_test, math_transform_predictions, squared=False) print(f"Mathematical Transformations RMSE: {math_transform_rmse}") # ------------------ OUTPUT --------------- # Mathematical Transformations RMSE: 47143.21
Les transformations mathématiques impliquent de modifier les valeurs des caractéristiques à l'aide d'opérations mathématiques pour faire ressortir les modèles sous-jacents. Vous appliquez des transformations logarithmiques, racine carrée et inverse à des colonnes spécifiques. Par exemple, la transformation logarithmique aide à normaliser les données asymétriques, la transformation racine carrée peut aider avec les valeurs aberrantes et la transformation inverse peut mettre l'accent sur les relations avec de petites valeurs. Vous formez un modèle de régression linéaire à l'aide de ces caractéristiques transformées et calculez la RMSE pour évaluer si les transformations ont amélioré la puissance prédictive du modèle.
Dans toutes ces méthodes, vous expérimentez différentes techniques pour rendre vos données plus adaptées à la modélisation. L'objectif est de trouver la méthode qui conduit au RMSE le plus bas, indiquant que les prédictions de votre modèle sont plus proches des valeurs cibles réelles et donc plus précises.
RMSE de base : 49204,92 Il s'agit de l'erreur quadratique moyenne (RMSE) du modèle de base, où aucune ingénierie ou transformation de caractéristiques n'a été appliquée. Le modèle utilise les caractéristiques d'origine telles qu'elles sont. Un RMSE de 49204,92 indique l'erreur de prédiction moyenne du modèle de référence sur les données de test.
RMSE d'information mutuelle : 39410,99 Cette RMSE représente les performances du modèle après application de la méthode de sélection des caractéristiques d'information mutuelle. Il est nettement inférieur au RMSE de référence, ce qui indique que la sélection des k principales fonctionnalités en fonction de leurs scores d'informations mutuelles a conduit à une amélioration des performances du modèle.
Clustering RMSE : 47715.30 Le RMSE correspond ici aux performances du modèle après introduction d'une nouvelle caractéristique catégorielle basée sur le clustering. La RMSE est proche de la RMSE de base, ce qui suggère que l'introduction du clustering n'a pas conduit à une amélioration significative dans ce cas.
PCA RMSE : 40055,78 Cette RMSE reflète les performances du modèle après application de l'ACP pour la réduction de la dimensionnalité. C'est un peu plus élevé que le RMSE d'information mutuelle mais inférieur au RMSE de base. Le modèle utilisant les caractéristiques transformées par PCA semble fonctionner modérément bien.
Label Encoding RMSE: 49204.92 Le RMSE montre ici les performances du modèle lorsque les variables catégorielles sont codées par étiquette. La RMSE correspond à la RMSE de référence, ce qui indique que l'utilisation de caractéristiques codées par étiquette n'a pas entraîné d'amélioration notable dans ce cas.
Transformations mathématiques RMSE : 47143,21 Cette RMSE représente les performances du modèle après l'application de diverses transformations mathématiques aux colonnes sélectionnées. Le RMSE est inférieur au RMSE de référence, ce qui suggère que ces transformations ont conduit à une amélioration des performances du modèle.
En résumé:
Gardez à l'esprit que les valeurs RMSE réelles et leur interprétation dépendent de divers facteurs tels que l'ensemble de données, la complexité du modèle et la nature de la variable cible. L'objectif est d'expérimenter différentes méthodes d'ingénierie de fonctionnalités et de sélectionner celle qui conduit aux meilleures performances sur des données invisibles.