Desarrollo - bernabe-ortega-tenezaca/HIA GitHub Wiki
4. Desarrollo
4.1. Adquisición y Carga de Datos
- Descarga de los archivos
renewable_energy_dump.sql
yrenewable_energy_part2.csv
desde GitHub. - Creación de una base de datos SQLite en memoria (
renewable_energy.db
). - Ejecución del script SQL para poblar la base de datos.
- Lectura de la tabla
renewable_energy
de la base de datos a un DataFrame de pandas (df
). - Lectura del archivo
renewable_energy_part2.csv
a un DataFrame de pandas (df_csv
).
4.2. Preprocesamiento y Limpieza de Datos
- Combinación de
df
ydf_csv
en un DataFrame único (df_combined
). - Estandarización de los nombres de las columnas de
df_combined
(minúsculas, reemplazo de espacios por guiones bajos). - Para el subconjunto
df_brasil_solar
(usado en el modelo):- Selección de características (
X
) y variable objetivo (y: production_(gwh)
). - Imputación de valores nulos en las características
X
utilizando la mediana de cada columna.
- Selección de características (
4.3. Análisis Exploratorio de Datos (EDA)
Nota: El EDA inicial se realizó sobre el DataFrame df
(datos del SQL).
Estadísticas Descriptivas: Cálculo de df.describe()
, df.dtypes()
, y df.isnull().sum()
para entender la distribución, tipos de datos y valores faltantes en los datos iniciales.
4.3.1. Visualizaciones Generadas:
- Distribución por Tipo de Energía: Gráfico de barras mostrando la frecuencia de los diferentes tipos de energía (
energy_type
) endf
. Permite ver qué tipos de energía son más comunes en esa porción del dataset. - Tendencia de Inversiones en Energía Renovable por Año: Gráfico de líneas mostrando la suma total de
investments_(usd)
a lo largo de los años (year
) endf
. Útil para identificar patrones de inversión. - Producción Total de Energía Renovable por País: Gráfico de barras mostrando la
production_(gwh)
total porcountry
endf
. Ayuda a identificar los países líderes en producción dentro de ese subconjunto de datos.
4.4. Desarrollo del Modelo de Machine Learning (Predicción de Producción Solar en Brasil)
Preparación de Características:
- Estandarización de las características (
X_scaled
) usandoStandardScaler
. - Reducción de dimensionalidad aplicando
PCA
(X_pca
), conservando 10 componentes principales. - División de Datos: Separación de
X_pca
ey
en conjuntos de entrenamiento (80%) y prueba (20%).
Entrenamiento del Modelo:
- Se utilizó un
GradientBoostingRegressor
. - El modelo se entrenó con los datos de entrenamiento (
X_train
,y_train
).
Evaluación del Modelo:
- Predicciones (
y_pred
) realizadas sobre el conjunto de prueba (X_test
). - Cálculo de métricas:
- Error Cuadrático Medio (MSE): 454538886.85041386 - Coeficiente de Determinación (R²): -0.6110385117180295 - Análisis del R²: Un R² negativo indica que el modelo tiene un rendimiento inferior a un modelo que simplemente predice la media de la variable objetivo. Esto sugiere que el modelo actual no captura adecuadamente la variabilidad de la producción solar en Brasil con las características y preprocesamiento utilizados.
- Importancia de Componentes PCA: Visualización de la proporción de varianza explicada por cada componente principal para entender su contribución.
4.5. Persistencia del Modelo
El modelo entrenado (GradientBoostingRegressor
), el objeto StandardScaler
y el objeto PCA
fueron guardados en archivos .pkl
utilizando joblib
en la carpeta model/
.
model/modelo_brasil_solar.pkl
model/modelo_brasil_scaler.pkl
model/modelo_brasil_pca.pkl
4.6. Creación de Aplicación Web para Consumo del Modelo (Flask)
Se desarrolló una aplicación web utilizando el microframework Flask para permitir la interacción con el modelo de predicción entrenado.
Propósito: La aplicación proporciona una interfaz de usuario donde se pueden ingresar los valores de las características necesarias para predecir la producción de energía solar en Brasil.
Carga de Modelos: Al iniciarse, la aplicación Flask carga los modelos serializados (modelo_brasil_solar.pkl
, modelo_brasil_scaler.pkl
, modelo_brasil_pca.pkl
) desde el directorio model/
.
Interfaz de Usuario: Se utilizó la plantilla AdminLTE para construir la interfaz, ofreciendo un diseño responsivo y profesional. Se definieron plantillas HTML (home.html
, modelo.html
) para las diferentes vistas de la aplicación.
Endpoint de Predicción (/predict):
- Esta ruta (preferiblemente accesible vía método POST) recibe los datos de las características ingresadas por el usuario en formato JSON.
Preprocesamiento en la App: Antes de realizar la predicción, los datos de entrada son:
- Convertidos a un array NumPy.
- Transformados utilizando el scaler cargado (para estandarizarlos).
- Transformados utilizando el objeto PCA cargado (para aplicar la reducción de dimensionalidad).
Predicción y Respuesta: El modelo GradientBoostingRegressor
cargado realiza la predicción sobre los datos preprocesados. La predicción resultante se devuelve al cliente en formato JSON.
Se implementó un manejo básico de errores para informar al usuario en caso de problemas durante el proceso.
Ejecución: La aplicación Flask se ejecuta localmente para pruebas y demostración.