Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una red neuronal consiste en simular las propiedades observadas en los sistemas
neuronales biológicos a través de modelos matemáticos recreados mediante mecanismos
artificiales. Una red neuronal, son algoritmos y estructuras inspirados en las funciones
biológicas de las redes neuronales.
Es común utilizar redes neuronales para problemas de clasificación y regresión, pero
realmente tienen un gran potencial para resolver multitud de problemáticas. Son muy
buenas para detectar patrones. En este documento utilizaremos las redes neuronales para
un pronóstico de series temporales utilizando Python como herramienta para crear y
enseñar el comportamiento de la serie de datos, para realizar un pronóstico. Una serie
temporal es un conjunto de muestras tomadas a intervalos de tiempo regulares, estas
dependen del tiempo y suele tener tendencias a crecer o decrecer. Analizar el
comportamiento para el pronóstico es muy útil para conocer el comportamiento de sistema
en este caso eléctrico, y realizar correcciones en base a los resultados esperados.
Para crear la red neuronal se utilizó la biblioteca Keras que es una biblioteca de Python que
proporciona, de manera simple. La creación de una amplia gama de modelos de Deep
Learning utilizando como backend otras bibliotecas como TensorFlow, Theano o CNTK.
Objetivos
Desarrollar de una red neuronal en el entorno de Python que permita predecir el
comportamiento del consumo eléctrico.
Aprender el funcionamiento de una red neuronal
Utilizar herramientas de programación que permitan la creación de redes
neuronales
Alcance
Se limitará predecir el comportamiento de 7 días de consumo de energía en base a la data
de energía que tiene 2 meses de consumo de energía, el mismo mostrara gráfica del
pronóstico del consumo y se compara con valores reales en el tiempo. Se utilizará una red
neuronal creada con Python a través de las librerías TensorFlow y Keras y se explicara el
procedimiento para realizar la red neuronal y todas las adecuaciones tomadas para este
fin.
Desarrollo del proyecto
Cargar la serie de datos a través de las librerías de numpy y pandas.
Para el pronóstico futuro se utilizó los últimos 15 días del mes de julio para pronosticar los
7 primeros días del mes de agosto.
En este paso se hace lo mismo que cuando se estaba procesando la data para el
entrenamiento de la neurona pero sin la salida Y o var1(t) porque es la que vamos a
predecir.
aquí tomamos la última fila que corresponde a los últimos días del mes de julio.
Se utiliza la función “rellenando” el desplazamiento que hacemos por cada predicción. Esto
es porque queremos predecir los 7 primeros días de agosto. Entonces para el 1 de agosto,
ya tenemos el set con los últimos 7 días de Julio. Pero para pronosticar el 2 de agosto
necesitamos los 7 días anteriores que INCLUYEN al 1 Julio y ese valor, lo obtenemos en
nuestra predicción anterior. Y así hasta el 7 de agosto.
Transformamos los valores de 0 y 1 a valores den kWh para la matriz de salida y poder
graficar la misma.
Resultados
700
600
500
400
300
200
100
0
Aquí vemos como resultado la gráfica de pronóstico de consumo. Esta grafica se comparó
con los valores reales medidos del mes de agosto y su comportamiento es el mismo al
pronosticado. Lo que valida la salida de red neuronal.
.
Conclusiones
Aprovechamos la capacidad de las redes neuronales de generalizar y lograr predecir
consumos futuros, Se logró entrenar una red neuronal a partir de datos reales de consumo
pueda predecir el consumo de sistema eléctrico, con variaciones reales.
Anexo
import pandas as pd
import numpy as np
import matplotlib.pylab as plt
%matplotlib inline
plt.rcParams['figure.figsize'] = (16, 9)
plt.style.use('fast')
PASOS=7
values = df.values
values = values.astype('float32')
scaler = MinMaxScaler(feature_range=(-1, 1))
values=values.reshape(-1, 1)
scaled = scaler.fit_transform(values)
reframed = series_to_supervised(scaled, PASOS, 1)
reframed.head()
values = reframed.values
n_train_days = 30+31 - (15+PASOS)
train = values[:n_train_days, :]
test = values[n_train_days:, :]
x_train, y_train = train[:, :-1], train[:, -1]
x_val, y_val = test[:, :-1], test[:, -1]
model = crear_modeloFF()
history=model.fit(x_train,y_train,epochs=EPOCHS,validation_data=(x_val,y_val
),batch_size=PASOS)
ultimosDias = df['17/07/2020':'31/07/2020']
ultimosDias
values = ultimosDias.values
values = values.astype('float32')
values=values.reshape(-1, 1)
scaled = scaler.fit_transform(values)
reframed = series_to_supervised(scaled, PASOS, 1)
reframed.drop(reframed.columns[[7]], axis=1, inplace=True)
reframed.head(7)
values = reframed.values
x_test = values[2:, :]
x_test = x_test.reshape((x_test.shape[0], 1, x_test.shape[1]))
x_test
def agregarNuevoValor(x_test,nuevoValor):
for i in range(x_test.shape[2]-1):
x_test[0][0][i] = x_test[0][0][i+1]
x_test[0][0][x_test.shape[2]-1]=nuevoValor
return x_test
results=[]
for i in range(7):
parcial=model.predict(x_test)
results.append(parcial[0])
print(x_test)
x_test=agregarNuevoValor(x_test,parcial[0])
adimen = [x for x in results]
inverted = scaler.inverse_transform(adimen)
inverted
prediccion1SemanaDiciembre = pd.DataFrame(inverted)
prediccion1SemanaDiciembre.columns = ['pronostico']
prediccion1SemanaDiciembre.plot()
prediccion1SemanaDiciembre.to_csv('pronostico.csv')