Este proyecto se centra en el análisis exploratorio de datos (EDA) y el modelado predictivo utilizando un conjunto de datos de precios de autos. Se utilizan diversas técnicas y modelos de machine learning para entender los datos y predecir precios y categorías de autos.
- Descripción del Proyecto
- Instalación de Dependencias
- Análisis Exploratorio de Datos
- Preparación de Datos
- Modelado y Evaluación
- Resultados
- Conclusiones
- Licencia
El objetivo de este proyecto es analizar un conjunto de datos de precios de autos, identificar patrones y correlaciones, y emplear modelos para clasificar y predecir Gamma y precios de autos respectivamente. Se utilizan diferentes algoritmos, incluyendo Random Forest, Árboles de Decisión y Regresión Lineal.
Asegúrate de tener instaladas las siguientes bibliotecas de Python:
pip install pandas numpy matplotlib seaborn scipy scikit-learn xgboost
Las etapas iniciales del proyecto incluyen:
- Lectura y visualización del conjunto de datos.
df_cars = pd.read_csv('ML_car.csv')
# Verificación de tipos de datos
print(df_cars.dtypes)
- Verificación de valores nulos.
nulls_in_df = pd.DataFrame(nulls.items(), columns=['Columna', 'Total Nulos'])
nulls_in_df
- Generación de visualizaciones como boxplots e histogramas.
plt.figure(figsize=(10, 6))
sns.boxplot(y=df_cars['price'])
plt.title('Boxplot de Precios de Autos')
plt.xlabel('Precio')
plt.show()
- Análisis de correlaciones entre variables.
- Se identifican y se corrigen valores faltantes.
- Se generan variables dummies para variables categóricas.
- Se realizan particiones de los datos en conjuntos de entrenamiento y prueba.
# Generar el df con las variables dummies
df_dummies = pd.get_dummies(df_cars, drop_first=True, dtype=float)
# Generar la matriz de correlación y ordenarla de manera descendente
# filtrar por variables que tengan correlación con el precio y sea mayor al 70%
correlation_matrix = df_dummies.corr()
correlation_with_price = correlation_matrix[['price']].sort_values(by='price', ascending=False)
filtered_correlation = correlation_with_price[correlation_with_price['price'].abs() > 0.7]
variable_above_70 = filtered_correlation[1:].index.tolist()
# Crear un mapa de calor para la correlación con 'price' y ajustar el grosor de la barra de color
plt.figure(figsize=(30, 4))
sns.heatmap(filtered_correlation, annot=True, fmt=".2f", cmap='coolwarm', square=True, linewidths=0.5, cbar_kws={'shrink': 0.5}, vmin=0.3, vmax=1) # Ajustar el tamaño de la barra de color
plt.title('Correlación con el Precio (mayor a 0.6)')
plt.show()
Se implementan los siguientes modelos:
- Random Forest Classifier:
Hiperparámetros:
n_estimators=200, max_depth=10, min_samples_split=5, min_samples_leaf=4
- Decision Tree Classifier:
Hiperparámetros:
max_depth=8, min_samples_split=5, min_samples_leaf=6
- Regresión Lineal:
- Se evalúa usando MSE y R².
linear_model = LinearRegression()
linear_model.fit(X_train_r, y_train_r)
- Random Forest Regressor:
Hiperparámetros:
n_estimators=100
# Instancia y entrenamiento del modelo
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)
rf_model.fit(X_train_r, y_train_r)
- XGBoost:
Giperparámetros:
n_estimators=100, learning_rate=0.2, max_depth=6
xgb_model = xgb.XGBRegressor(n_estimators=100, learning_rate=0.2, max_depth=6, random_state = 42)
xgb_model.fit(X_train_r, y_train_r)
Los resultados incluyen:
- Matrices de confusión.
- Reportes de clasificación.
- Gráficos de dispersión para evaluar las predicciones.
- Ejemplo de Matriz de Confusión
conf_matrix = confusion_matrix(y_test_c, y_pred_RFC)
print(conf_matrix)
Los modelos de clasificación y regresión proporcionan diferentes niveles de precisión en las predicciones de precios de autos y su categorización. Se debe considerar el uso de diferentes algoritmos y técnicas para mejorar el rendimiento del modelo.
Se recomienda a la empresa de autos utilizar los modelos de clasificación RandomForestClassifier y de regresión RandomForestRegressor ya que fueron los que obtuvieron mejores resultados siendo estos los siguientes:
#Matriz de confusión RandomForestClassifier
[[20 3]
[ 0 18]]
precision recall f1-score support
0 1.00 0.87 0.93 23
1 0.86 1.00 0.92 18
accuracy 0.93 41
macro avg 0.93 0.93 0.93 41
weighted avg 0.94 0.93 0.93 41
ROC-AUC: 0.9975845410628019
#Valor MSE y R^2 RandomForestRegressor
Random Forest - MSE: 3962403.74, R^2: 0.95
Este proyecto está bajo la Licencia MIT. Para más detalles, consulta el archivo LICENSE.