Hecho por:
-
Kevin Sebastián Cifuentes López.
-
Mariana Lopera Correa.
En este proyecto, se desarrolla un modelo de Machine Learning para predecir los precios de venta de viviendas en Ames, Iowa, Estados Unidos. El conjunto de datos utilizado fue sacado de Kaggle link datos, este contiene información detallada sobre diversas características de las casas, como el tamaño del lote, el área habitable, la calidad de construcción, el año de construcción, entre otros. El objetivo es utilizar estas características para entrenar un modelo de regresión lineal que pueda predecir con precisión el precio de venta de una casa.
El modelo no solo se enfoca en predecir los precios actuales, sino que también está diseñado para realizar proyecciones futuras, permitiendo estimar cómo podrían evolucionar los precios de las viviendas en los próximos años. Esto es especialmente útil para inversionistas, agentes inmobiliarios y propietarios que deseen tomar decisiones informadas basadas en tendencias del mercado.
Asegúrate de tener instaladas las siguientes bibliotecas:
pip install numpy pandas scikit-learn matplotlib seaborn tabulate
git clone https://github.com/Mayday3003/EconometricModel_ML.git
Para ejecutar el programa, usa el siguiente comando:
python src/view/console/main.py
Esto cargará los datos, entrenará el modelo y hará predicciones futuras.
Para ejecutar las pruebas unitarias, usa el siguiente comando:
python -m unittest tests/test_model.py
Contiene la lógica del negocio y las operaciones relacionadas con los datos y el modelo.
data_preparation.py
: Funciones para cargar, limpiar y preparar los datos.feature_engineering.py
: Funciones para crear nuevas características (features) y transformar los datos.model_training.py
: Funciones para entrenar y evaluar modelos.future_predictions.py
: Funciones para generar datos futuros y hacer predicciones.
Maneja la interacción con el usuario y la visualización de resultados.
console/main.py
: Punto de entrada para la interfaz de consola.results/visualization.py
: Funciones para visualizar resultados (gráficos, métricas, etc.).
Gestiona la comunicación entre el modelo y la vista.
data_controller.py
: Controla la carga y preparación de los datos.model_controller.py
: Controla el entrenamiento y la evaluación del modelo.
Contiene pruebas unitarias para cada módulo del proyecto.
test_data_preparation.py
: Pruebas para la preparación de datos.test_feature_engineering.py
: Pruebas para la ingeniería de características.test_model_training.py
: Pruebas para el entrenamiento y evaluación del modelo.
Contiene los datos utilizados para entrenar y evaluar el modelo.
train.csv
: Conjunto de datos de entrenamiento.
Archivo de configuración para rutas y parámetros del proyecto.
Archivo para ignorar archivos y carpetas que no deben ser rastreados por Git.
load_data(file_path)
: Carga los datos desde un archivo CSV.split_data(data)
: Divide los datos en conjuntos de entrenamiento, validación y prueba.divide_dataframes(dataframe)
: Llena valores nulos y prepara los datos para el modelado.
transform_target(dataframe_train, dataframe_validation_features, dataframe_test, target_column)
: Transforma la variable objetivo usandolog1p
.group_by_mean_and_bin(df, df_full, column_name, bins, labels)
: Agrupa los datos por la media desaleprice
y los divide en bins.encode_categorical_columns(df, encoder)
: Codifica columnas categóricas usandoLabelEncoder
.
train_model(x_train, train_target)
: Entrena un modelo de regresión lineal.evaluate_model(model, X, y, dataset_name)
: Evalúa el modelo y muestra el puntaje.
generate_future_data(last_year, num_years)
: Genera datos futuros para los próximos años.predict_future_prices(model, future_data, feature_columns)
: Predice los precios de las casas para los años futuros.
Muestra la tendencia de los precios a lo largo del tiempo.
Muestra una tabla de esta forma, para facilitar la obsrvación de los resultados
yearbuilt predicted_price 0 2026 2746.285057 1 2027 2750.765683 2 2028 2755.253615
Si deseas contribuir a este proyecto, sigue estos pasos:
- Haz un fork del repositorio.
- Crea una nueva rama (
git checkout -b feature/nueva-funcionalidad
). - Realiza tus cambios y haz commit (
git commit -m 'Añade nueva funcionalidad'
). - Haz push a la rama (
git push origin feature/nueva-funcionalidad
). - Abre un Pull Request.
Este proyecto está bajo la licencia MIT. Consulta el archivo LICENSE
para más detalles.