Detección de valores atípicos de consumo de gas: proyecto de red neuronal. Malos resultados

10

Traté de detectar valores atípicos en el consumo de gas energético de algunos edificios holandeses, construyendo un modelo de red neuronal. Tengo muy malos resultados, pero no puedo encontrar la razón.

No soy un experto, así que me gustaría preguntarle qué puedo mejorar y qué estoy haciendo mal. Esta es la descripción completa: https://github.com/denadai2/Gas-consumption-outliers .

La red neuronal es una red FeedFoward con propagación hacia atrás. Como se describe aquí , dividí el conjunto de datos en un conjunto de datos "pequeño" de 41'000 filas, 9 características e intenté agregar más características.

Entrené las redes, pero los resultados tienen 14.14 RMSE, por lo que no puede predecir tan bien el consumo de gas, consecutivamente no puedo ejecutar un buen mecanismo de detección de valores atípicos. Veo que en algunos documentos que incluso si predicen el consumo diario o por hora en la energía eléctrica, tienen errores como MSE = 0.01.

¿Qué puedo mejorar? ¿Qué estoy haciendo mal? ¿Puedes echar un vistazo a mi descripción?

marcodena
fuente
2
¿Qué quieres decir con malos resultados? Describa su proceso, sus resultados y cómo difieren de lo que esperaba, en lugar de vincularlo solo al repositorio de git. De lo contrario, esta discusión no será de utilidad para nadie.
Aire
También es cierto esto: D. Agregué la descripción en la página "Los resultados tienen un RMSE de 14.14, por lo que no puede predecir tan bien los consumos de gas, consecuentemente no puedo ejecutar un buen mecanismo de detección de valores atípicos. Veo eso en algunos documentos que incluso si predicen consumo diario o por hora en la energía eléctrica, tienen errores como MSE = 0.01 ".
marcodena
1
@marcodena Este es un sitio de control de calidad, y otros necesitan saber lo que está tratando de resolver, para que puedan entender las respuestas y, con suerte, puedan usarlas en sus propios problemas. A eso se refería AirThomas, y también es por qué sería bueno que pudieras describir lo que estás haciendo y qué es exactamente lo que crees que está mal. Si el enlace a su página de git-hub cambia, el enlace aquí no será válido y otros no podrán entender cuál es el problema. Por favor, tómese un minuto para hacer su pregunta autónoma. Gracias.
Rubens
1
Cuando descubra que su problema tarda mucho en explicarse, es cuando es más importante dedicar tiempo a explicar su pregunta a los demás, explícitamente y con muchos detalles y debates sobre sus investigaciones / intentos. A menudo, durante ese proceso, encontrará algunas o todas las respuestas usted mismo. No solo es un gran sentimiento, si lo que encuentras es útil para otros, también puedes publicar esa pregunta en la que pasas tanto tiempo y las respuestas que se te ocurrieron.
Aire
1
Solo una aclaración, cuando menciona que "en algunos documentos tienen errores como MSE = 0.01", ¿se refiere al mismo conjunto de datos que está utilizando? ¿O es un conjunto de datos completamente diferente?
insys

Respuestas:

8

Solo una idea: sus datos son altamente estacionales: los ciclos diarios y semanales son bastante perceptibles. En primer lugar, intente descomponer sus variables (consumo de gas y electricidad, temperatura y radiación solar). Aquí hay un buen tutorial sobre la descomposición de series temporales para R.

Después de obtener la tendencia y los componentes estacionales, comienza la parte más interesante. Es solo una suposición, pero creo que las variables de consumo de gas y electricidad serían bastante predecibles mediante el análisis de series de tiempo (por ejemplo, el modelo ARIMA ). Desde mi punto de vista, la parte más emocionante aquí es tratar de predecir los residuos después de la descomposición, utilizando los datos disponibles (anomalías de temperatura, radiación solar, velocidad del viento). Supongo que estos residuos serían valores atípicos que estás buscando. Espero que encuentres esto útil.

Sobach
fuente
3

En su cuaderno de entrenamiento presenta resultados para el entrenamiento con 20 épocas. ¿Has intentado variar ese parámetro para ver si afecta tu rendimiento? Este es un parámetro importante para la retropropagación.

Para estimar los parámetros de su modelo, como señaló el usuario tomaskazemekas, trazar curvas de aprendizaje es un muy buen enfoque. Además de eso, también podría crear un gráfico utilizando un parámetro de modelo (por ejemplo, épocas de entrenamiento o tamaño de capa oculta) vs. Error de entrenamiento y validación. Esto le permitirá comprender el equilibrio de sesgo / varianza y lo ayudará a elegir un buen valor para sus parámetros. Alguna información se puede encontrar aquí . Naturalmente, es una buena idea mantener un pequeño porcentaje de sus datos para un (tercer) Conjunto de prueba.

Como nota al margen, parece que aumentar el número de neuronas en su modelo no muestra una mejora significativa para su RMSE. Esto sugiere que también podría probar con un modelo más simple, es decir, con menos neuronas y ver cómo se comporta su modelo.

De hecho, sugeriría (si aún no lo ha hecho) probar primero un modelo simple con pocos o ningún parámetro, por ejemplo, Regresión lineal, y comparar sus resultados con la literatura, solo como un control de cordura.

insys
fuente
Agregué algunos gráficos, después de haber mejorado el modelo MUCHO. En github hay nuevos pasos. ¿Puedo preguntarle cómo puedo aplicar la regresión lineal en un problema de serie temporal? :(
marcodena
2

El principal problema aquí es que incluso antes de intentar aplicar algoritmos de detección de anomalías, no está obteniendo predicciones suficientemente buenas del consumo de gas utilizando redes neuronales.

Si el objetivo principal aquí es alcanzar la etapa en la que se podrían usar algoritmos de detección de anomalías y usted declara que tiene acceso a ejemplos de aplicación exitosa de regresión lineal para este problema, este enfoque podría ser más productivo. Uno de los principios de una aplicación de aprendizaje automático exitosa es que se pueden probar varios algoritmos diferentes antes de la selección final basada en los resultados.

Si elige ajustar el rendimiento de su red neuronal, se puede utilizar la curva de aprendizaje que representa el efecto del cambio en diferentes hiperparámetros sobre la tasa de error. Los hiperparámetros que se pueden modificar son:

  • cantidad de características
  • orden del polinomio
  • parámetro de regularización
  • cantidad de capas en la red

La mejor configuración se puede seleccionar por el rendimiento en el conjunto de validación cruzada.

tomaskazemekas
fuente
Agregué
2

En sus cuadernos, no vi su modelo de red neuronal, ¿puede señalar qué biblioteca está utilizando, cuántas capas tiene y qué tipo de red neuronal está utilizando?

En sus cuadernos, parece que está utilizando el conjunto de datos ruidoso y atípico para entrenar la red neuronal, creo que debería entrenar la red neuronal en el conjunto de datos para que no tenga valores atípicos para poder ver la distancia de observación de la predicción de la red neuronal para etiquetar la observación como atípica o no.

Escribí un par de cosas sobre la detección de valores atípicos en las señales de series temporales, sus datos son altamente estacionales, como mencionó Sobach, y podría usar FFT (primer enlace arriba) para obtener la tendencia general de la señal. Después de obtener el componente de frecuencia en el consumo de gas, puede mirar los componentes de alta frecuencia para obtener los valores atípicos.

Además, si desea insistir en utilizar la red neuronal para los datos estacionales, es posible que desee verificar las redes neuronales recurrentes, ya que podrían incorporar las observaciones pasadas mejor que una red neuronal vainilla, y supuestamente puede proporcionar un mejor resultado para los datos que tiene .

Bugra
fuente
Probé su método FFT pero realmente no entiendo cómo establecer el umbral de frecuencia y la amplitud con mis datos.
Seguiré
También agregué las fuentes
marcodena