J'ai essayé de voir combien de puissance demandée peut être prédite par l'apprentissage automatique, je vais donc organiser la procédure.
Cela fait six mois que j'ai écrit cet article et j'ai beaucoup appris sur de nouvelles choses, j'ai donc écrit l'article de la partie 2. Prédire la demande d'énergie avec l'apprentissage automatique, partie 2
L'article suivant a également été créé le 22 décembre 2017, veuillez donc vous y référer également. Prévisions de consommation d'énergie avec TensorFlow avec Keras
Machine: MacBook Air mi-2012 Langage: Python 3.5.1 Exécuter: cahier Jupyter 4.2.1 Bibliothèque: scikit-learn sur Anaconda 4.1.0
Tout d'abord, téléchargez les données de demande de puissance sur le site Web de Tokyo Electric Power.
http://www.tepco.co.jp/forecast/html/download-j.html
Le nom du fichier était "juyo-2016.csv". Les données téléchargées sont un fichier CSV de date, d'heure et de puissance réelle, mais comme il contient une petite chaîne de caractères supplémentaire, corrigez-le et enregistrez-le au format UTF-8.
Le format des données enregistrées est le suivant.
DATE | TIME | Performance(10 000 kW) |
---|---|---|
2016/04/01 | 00:00 | 234 |
2016/04/01 | 01:00 | 235 |
... |
Ensuite, lorsque j'ai cherché du matériel de référence, j'ai pu télécharger des données météorologiques antérieures de l'Agence météorologique, donc je téléchargerai les données pour la même période et le même intervalle que les données de demande de puissance.
http://www.data.jma.go.jp/gmd/risk/obsdl/index.php
Le nom du fichier était "data.csv". Les données téléchargées sont au format CSV de la date et de l'heure, de la température, des informations de qualité et du numéro uniforme, mais comme elles contiennent une petite chaîne de caractères supplémentaire, corrigez-la et enregistrez-la au format UTF-8.
Le format des données enregistrées est le suivant.
Date et l'heure | Température(℃) |
---|---|
2016-04-01 00:00 | 15 |
2016-04-01 01:00 | 16 |
... |
python
import pandas as pd
import numpy as np
#Lecture des données de puissance
kw_df = pd.read_csv("juyo-2016.csv")
#Lecture des données de température
temp_df = pd.read_csv("data.csv")
python
import pandas as pd
url = "http://www.tepco.co.jp/forecast/html/images/juyo-2016.csv"
kw_df = pd.read_csv(url, encoding="shift_jis", skiprows=2)
kw_df.head()
file = "data.csv"
temp_df = pd.read_csv(file, encoding="shift_jis", skiprows=4)
temp_df = temp_df[temp_df.columns[:2]]
temp_df.columns = ["Date et l'heure","Température(℃)"]
Lors de l'application à l'apprentissage automatique, nous combinons les données et les convertissons en données numériques pour l'apprentissage automatique. Tout d'abord, les données de date sont inutiles telles quelles, alors convertissons-les en données quotidiennes.
[Exemple] Dimanche-> 0 Lundi-> 1 ...Et
Ensuite, puisqu'il s'agit de données horaires, convertissez l'heure en données.
[Exemple] 0:00 -> 0 1:00 -> 1 ...Et
python
#Combiner des données
df = kw_df
df["Température"] = temp_df["Température(℃)"]
#Obtenez des données journalières
import datetime
pp = df["DATE"]
tmp = []
for i in range(len(pp)):
d = datetime.datetime.strptime(pp[i], "%Y/%m/%d")
tmp.append(d.weekday())
df["weekday"] = tmp
#Obtenir des données de temps
pp = df["TIME"]
tmp = []
for i in range(len(pp)):
d = datetime.datetime.strptime(pp[i], "%H:%M")
tmp.append(d.hour)
df["hour"] = tmp
Créez des données d'entraînement et testez des données à partir des données traitées. Ici, les variables utilisées pour l'entrée sont «température», «jour» et «heure», et les variables de sortie sont «puissance».
La séquence des données traitées est "DATE", "HEURE", "réelle (10 000 kW)", "température", "jour de la semaine", "heure", donc entrée (variable explicative) 3,4, Obtenue à partir de la 5ème colonne, la sortie (variable de sortie) utilise le résultat réel (10 000 kw) dans la 2ème colonne. Il normalise également les données pour l'apprentissage automatique.
python
#contribution
pp = df[["Température","weekday","hour"]]
X = pp.as_matrix().astype('float')
#production
pp = df["Performance(10 000 kW)"]
y = pp.as_matrix().flatten()
#Charger le module de validation croisée
from sklearn import cross_validation
#Ensemble d'entraînement avec données étiquetées(X_train, y_train)Et ensemble de test(X_test, y_test)Divisée en
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=.2, random_state=42)
#Charger le module de normalisation
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(X_train)
X_train = scaler.transform(X_train)
X_test = scaler.transform(X_test)
Essayons l'apprentissage automatique avec SVM.
python
#Module de charge
from sklearn import svm
model = svm.SVC()
#Apprentissage
model.fit(X_train, y_train)
# model.score(X,y)Utilisez pour obtenir la précision des prédictions
print(model.score(X_test,y_test))
Le score prévu est "0,00312989045383"! !! J'ai été surpris de voir à quel point le score était bas! !! Ce n'est pas bien! Tu penses ...
Pour voir à quoi il ressemble, j'ai dessiné un graphique et l'ai vérifié.
python
#Calcul d'erreur
pp = pd.DataFrame({'kw': np.array(y_test), "result": np.array(result)})
pp["err"] = pp["kw"] - pp["result"]
pp.plot()
D'une manière ou d'une autre, il semble suivre tel quel (^ - ^) Vérifiez le résultat de la prédiction avec les valeurs réelles.
python
err_max = 0
err_min = 50000
err_ave = 0
for i in range(len(pp)):
if err_max < pp["err"][i]:
err_max = pp["err"][i]
if err_min > pp["err"][i]:
err_min = pp["err"][i]
err_ave += pp["err"][i]
print(err_max)
print(err_min)
print(err_ave / i)
Le résultat de l'exécution est le suivant.
1571
-879
114.81661442
Eh bien, qu'en est-il de ce résultat? Je ne peux pas dire si c'est bon ou mauvais ... (-_-;)
En fait, je pense que je dois y réfléchir davantage, mais si je devais faire une prévision de la demande d'électricité dans une situation où il y avait peu de données passées, je pensais que ce serait un bon résultat de référence.
À propos, le fichier Jupyter Notebook et le fichier CSV traité ont été publiés sur GitHub, veuillez donc vous y référer également.
https://github.com/shinob/predict_kw
Recommended Posts