[PYTHON] Essayez de prédire la demande de puissance par l'apprentissage automatique

introduction

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.

Postscript

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

Postscript

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

Environnement utilisé

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

Collecte de données

Demande de puissance

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
...

Température

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
...

Capture de données

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(℃)"]

Traitement de l'information

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éation de données d'entraînement et de données de test

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)

Apprentissage

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 ...

Confirmation des résultats des prévisions

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()

Unknown.png

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

Essayez de prédire la demande de puissance par l'apprentissage automatique
Prévision de la demande d'électricité par GRU
Prédire la demande de puissance avec l'apprentissage automatique, partie 2
Prévision du cours de l'action par machine learning Numerai Signals
Introduction à l'apprentissage automatique
Essayez de dessiner un "front de type carte météorologique" par apprentissage automatique basé sur des données météorologiques (5)
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur les données météorologiques (3)
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur des données météorologiques (1)
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur des données météorologiques (4)
Essayez de dessiner un "front de type carte météo" par apprentissage automatique basé sur des données météorologiques (2)
Essayez de prédire le taux de change (FX) avec un apprentissage automatique non approfondi
Les débutants en apprentissage automatique essaient de créer un arbre de décision
[Apprentissage automatique] Essayez de détecter des objets à l'aide de la recherche sélective
Une introduction à l'apprentissage automatique
Super introduction à l'apprentissage automatique
4 [/] Quatre arithmétiques par apprentissage automatique
Essayez le machine learning à la légère avec Kaggle
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Les débutants en apprentissage automatique tentent de contacter Naive Bayes (2) - Mise en œuvre
Prévisions du cours des actions par apprentissage automatique Commençons Numerai
Les débutants en apprentissage automatique tentent de contacter Naive Bayes (1) - Théorie
Introduction à la rédaction de notes d'apprentissage automatique
[Apprentissage automatique] Étudions l'arbre de décision
Résumé de l'apprentissage automatique par les débutants de Python
Les débutants en apprentissage automatique essaient la régression linéaire
SVM essayant l'apprentissage automatique avec scikit-learn
Présentation de la bibliothèque d'apprentissage automatique SHOGUN
[Apprentissage automatique] Essayez d'étudier une forêt aléatoire
Comment collecter des données d'apprentissage automatique
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
Les prévisions du cours des actions par apprentissage automatique sont si vraies Signaux Numerai
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage ((1) Implémentation du blackjack)
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 9 Introduction à scikit-learn
Essayez de prédire le triplet de la course de bateaux en classant l'apprentissage
scikit-learn Comment utiliser le résumé (apprentissage automatique)
Faire le contrôle d'un homme sandwich par l'apprentissage automatique ver4
Essayez de faire face à la somme partielle
Enregistrez les étapes pour comprendre l'apprentissage automatique
J'ai installé Python 3.5.1 pour étudier l'apprentissage automatique
Une introduction à OpenCV pour l'apprentissage automatique
Est-il possible de manger avec la prévision du cours des actions par apprentissage automatique [Machine learning partie 1]
Recherche de blogs techniques par machine learning en mettant l'accent sur la "facilité de compréhension"
[Échec] Trouvez Maki Horikita par apprentissage automatique
Quatre règles de fonctionnement avec l'apprentissage automatique 6 [Commercial]
Apprentissage automatique
Comment profiter de Coursera / Machine Learning (semaine 10)
Essayez de classer les livres d'O'Reilly en les regroupant
Une introduction à Python pour l'apprentissage automatique
Prévision du cours des actions à l'aide de l'apprentissage automatique (édition de retour)
Mémo d'étude Python & Machine Learning ④: Machine Learning par rétro-propagation
Essayez de prédire la valeur de la jauge de niveau d'eau par apprentissage automatique en utilisant les données ouvertes de Data City Sabae
Essayez d'écrire du code à partir de 1 en utilisant le chainer du cadre d'apprentissage automatique (édition mnist)
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
Est-il possible de manger avec les prévisions de cours de bourse par apprentissage automatique [Plan de mise en œuvre]
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
[Python] Introduction facile à l'apprentissage automatique avec python (SVM)