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 y renewable_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 y df_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.

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) en df. Permite ver qué tipos de energía son más comunes en esa porción del dataset.   Distribución Tipo
  • 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) en df. Útil para identificar patrones de inversión. Tendencias
  • Producción Total de Energía Renovable por País: Gráfico de barras mostrando la production_(gwh) total por country en df. Ayuda a identificar los países líderes en producción dentro de ese subconjunto de datos.  Tendencias

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) usando StandardScaler.
  • Reducción de dimensionalidad aplicando PCA (X_pca), conservando 10 componentes principales.
  • División de Datos: Separación de X_pca e y 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.