Многие жители этого солнечного острова были свидетелями внедрения модели открытого рынка энергии, внедрение которой началось в конце 2018 года и которая должна быть завершена к настоящему времени. Для многих это был захватывающий опыт - принять участие в выборе следующего поставщика энергии - остаться или сменить его.

Такие «разговоры о городе» все еще вызывали резонанс, когда мы углублялись в модели и методы классификации машинного обучения. И это стало мотивацией для взятия на себя проекта контролируемого машинного обучения по стабильности линии системы Decentral Smart Grid Control.

Однако, если на данном этапе у вас возникнет интерес узнать больше об открытом рынке энергии, просто перейдите к:
Окончательное сравнение: какой розничный торговец электроэнергией самый дешевый в Сингапуре? https://blog.seedly.sg/electricity-retailer-comparison-cheapest-in-singapore/

Это не углубленное изучение DSGC как такового, а скорее аспект машинного обучения, чтобы собрать представление о процессе классификации машинного обучения при определении стабильности электрической линии. Существуют журналы и публикации по этой системе, которые легко доступны для поиска и доступны, если вы захотите пойти в этом направлении.

Что такое DSGC?

Ценообразование на электроэнергию следует экономической модели спроса и предложения, и в традиционных системах производство электроэнергии, основанное на спросе, определяет стабильность системной сети.

Decentral Smart Grid Control (DSGC) - это перспективная система, обслуживающая как традиционные источники энергии, так и негибкие (то есть возобновляемые) источники энергии. DSGC обслуживает всех участников, то есть потребителей и производителей энергии, связывая цену на электроэнергию с частотой сети, которая по существу определяет стабильность сети.

Данные

Набор данных, используемый для изучения систем классификации при определении устойчивости сети, представляет собой Набор данных моделирования стабильности электрической сети, доступный на сайте репозитория машинного обучения UCI. Набор данных довольно новый, он был загружен в репозиторий менее года назад.

Набор данных является результатом моделирования 4-узловой звездной системы DSGC. Он содержит 14 функций - 12 входных функций, 1 реальную цель и 1 категориальную цель. 12 входных функций:

  • участник 1 (продюсер)
  • участник 2
  • участник 3
  • участник 4
  • метрика измерения для участника

- время реакции участника
- потребляемая (отрицательная) / производимая (положительная) (положительная) (положительная) мощность (реальная)
- коэффициент (гамма), пропорциональный эластичности цены

PostgreSQL

Заполнение данных в PostgreSQL - довольно простой процесс, включающий:

  1. создание новой базы данных,
  2. подключение к базе данных,
  3. создание соответствующих таблиц с обязательными полями и их типами данных,
  4. и, наконец, импорт данных в базу данных.

Вышеупомянутый процесс автоматизирован путем добавления команд в сценарий SQL и выполнения из командной строки:

$ psql -f setup.sql

Важное замечание: вместо числа с плавающей запятой действительные числа хранятся в формате типа данных NUMERIC (точность, масштаб).

Для загрузки данных в фрейм данных python была вызвана функция Pandas read_sql с соответствующими параметрами подключения:

import pandas.io.sql as pd_sql
# connection parameters
params = {'host': '127.0.0.1', 'user': 'hostname', 'port': 5432}
connection = connect(**params, dbname='proj3')
df = pd_sql.read_sql_query("SELECT * FROM dsgc_data;",con=connection)

Просмотр данных

Распределение производителя, p1, ожидаемо демонстрирует нормальное распределение, которое строится с помощью функции seaborn distplot. Атрибуты стиля и форматирования применяются к графику для достижения желаемого визуального эффекта.

import seaborn as sns
# set the style
sns.set_style("whitegrid")
# plot
sns.distplot(df['cp_p1'])
plt.title("electricity producer, p1", fontweight='bold', color='#404040')
plt.xlabel('distribution, nominal power', fontweight='bold', color='#505050')
plt.ylabel('abs(p2 + p3 + p4)', color='#505050', rotation=0, fontweight='bold', horizontalalignment='right', y=1.0)

Класс категории «нестабильная» примерно в 1,7 раза больше класса категории «стабильная», что свидетельствует о приемлемости баланса классов. Мы могли бы пересмотреть методы, например передискретизацию, чтобы уравновесить классовый баланс, если обнаружим, что производительность модели неприемлема. Однако, как мы увидим, этого не потребуется.

Текстовый вывод баланса классов также можно получить, вызвав функцию value_counts фрейма данных:

print(df.op_categorical.value_counts())

Для визуализации баланса классов вызывается функция seaborn countplot и устанавливаются соответствующие атрибуты для достижения требуемого визуального стиля:

# set the style
sns.set_style("whitegrid")
# plot
splot = sns.countplot(df['op_categorical'])
# add the value counts on top of each bar
for p in splot.patches:
    splot.annotate(format(p.get_height(), '.0f'), (p.get_x() + 
# align the value count text
p.get_width() / 2., p.get_height()-180), ha = 'center', va = 'center', xytext = (0, 10), textcoords = 'offset points')
# further styling
plt.title("Class Balance", fontweight='bold')
plt.xlabel('Category', fontweight='bold', color='#505050')
plt.xticks(color='#606060')
plt.yticks(color='#606060')
plt.ylabel('Count', color='#505050', rotation=0, fontweight='bold', horizontalalignment='right', y=1.0)

Сравнение классификаторов и выбор модели

Выбор подходящего классификатора включает построение каждой из различных моделей классификатора и вычисление их показателей F1 и точности для сравнения их характеристик. Точность позволяет быстро оценить производительность, в то время как оценка F1 обеспечивает более сбалансированное измерение для каждого из целевых результатов.

Результаты показывают, что дерево решений, случайный лес и QDA (квадратичный дискриминантный анализ) работают лучше остальных. Классификатор случайного леса достигает наивысших показателей стабильности и точности F1. тогда как классификатор QDA одинаково хорошо работает как с F1-стабильной, так и с F1-нестабильной категорией, но с более низкой оценкой точности.

QDA похожа на наивную байесовскую модель в том, что они оба используют гауссово распределение и модель случайного леса как ансамбль деревьев решений, поэтому выбран классификатор случайного леса, поскольку классификаторы случайного леса и дерева решений входят в тройку лучших исполнителей.

Сравнение участников

Теперь, когда классификатор выбран, выполняется быстрый прогон данных каждого участника в еще не оптимизированную модель, чтобы получить представление о том, как каждый участник будет работать в одиночку. Цель этого сравнения состоит в том, чтобы дать модели возможность обнаружить аномалии в характеристиках каждого участника.

Метрика «Рабочие характеристики приемника» используется для оценки классификации модели.

Модель подвергается стратифицированной перекрестной проверке K-Fold для каждого участника для быстрого анализа результатов каждого участника.

Настройка и оптимизация выбранной модели

Производительность модели также была подвергнута перекрестной проверке стратифицированного K-Fold для получения базовой линии.

Приемлемая оценка площади под кривой (AUC), а также низкая дисперсия ее среднего значения являются хорошим показателем. Впоследствии настройка модели путем оптимизации гиперпараметров привела к повышению производительности, о чем свидетельствует улучшенная оценка площади под кривой. Построение кривой рабочих характеристик приемника позволяет визуализировать работу модели.

Ниже приведен код Python для перекрестной проверки стратифицированных K-складок:

print(__doc__)
from scipy import interp
import matplotlib.pyplot as plt 
import seaborn as sns
from sklearn.metrics import roc_curve, auc
from sklearn.model_selection import StratifiedKFold
import numpy as np
import pickle
# Classification and ROC analysis
sns.set()
sns.set_style("white", {'text.color': '.15', 'xtick.bottom': True, 'xtick.color': '.9', 'xtick.direction': 'in', 'xtick.top': True,'ytick.color': '.9', 'ytick.direction': 'in','axes.labelcolor': '.85', 'ytick.left': True,'axes.edgecolor': '.97'})
# Run classifier with cross-validation and plot ROC curves
X = df.drop(['op_real','op_categorical'], axis=1)
y = df['op_categorical']
cv = StratifiedKFold(n_splits=5)
tprs, aucs = [], []
mean_fpr = np.linspace(0, 1, 100)
# Load the model
with open(f"models/selected-tuned-RF-model.pickle", "rb") as pfile:
    exec(f"classifier = pickle.load(pfile)")
i = 0
for train, test in cv.split(X, y):
    probas_ = classifier.fit(X.iloc[train], y.iloc[train]).predict_proba(X.iloc[test])
    # Compute ROC curve and area the curve
    fpr, tpr, thresholds = roc_curve(y.iloc[test], probas_[:, 1], pos_label="unstable")
    tprs.append(interp(mean_fpr, fpr, tpr))
    tprs[-1][0] = 0.0
    roc_auc = auc(fpr, tpr)
    aucs.append(roc_auc)
    plt.plot(fpr, tpr, lw=1, alpha=0.3, label='K# %d (AUC = %0.2f)' % (i+1, roc_auc))
i += 1
mean_tpr = np.mean(tprs, axis=0)
mean_tpr[-1] = 1.0
mean_auc = auc(mean_fpr, mean_tpr)
std_auc = np.std(aucs)
plt.plot(mean_fpr, mean_tpr, color='b', label=r'Mean AUC = %0.2f $\pm$ %0.2f)' % (mean_auc, std_auc), lw=2, alpha=.8)
std_tpr = np.std(tprs, axis=0)
tprs_upper = np.minimum(mean_tpr + std_tpr, 1)
tprs_lower = np.maximum(mean_tpr - std_tpr, 0)
plt.fill_between(mean_fpr, tprs_lower, tprs_upper, color='grey', alpha=.9, label=r'$\pm$ 1 std. dev.')
plt.plot([0, 1], [0, 1],'y:')
plt.xlim([-0.05, 1.05])
plt.ylim([-0.05, 1.05])
plt.ylabel('True Positive Rate', color='#505050')
plt.xlabel('False Positive Rate', color='#505050')
plt.xticks(color='#606060')
plt.yticks(color='#606060')    
plt.title('Stratified K-Folds Cross-Validator - All Participants', color='#505050',fontweight='bold', fontsize=10)
leg = plt.legend(loc="lower right", prop={'size': 8})
for text in leg.get_texts():
    plt.setp(text, color = '#505050')
plt.savefig('tuned-roc.png', bbox_inches='tight')
plt.show()

Заключение

Быстрый анализ стабильности линии Decentral Smart Grid Control показывает, что модель классификатора случайного леса может предсказать стабильность линии системы с точностью области под кривой. 0,88.

Получение дополнительных полевых данных и крайних случаев необходимо, чтобы убедиться в надежности модели.

Распространенной проблемой при настройке гиперпараметров является проблема чрезмерной настройки, и это было принято во внимание, чтобы гарантировать, что гиперпараметры не были чрезмерно настроены.

Кроме того, базовые предположения систем DSGC, например проблема фиксированного ввода, проблема равенства, предположения физической модели и т. Д., Могут быть дополнительно исследованы для улучшения знаний предметной области, что, в свою очередь, приведет к улучшенной модели классификации машинного обучения.

Благодарности

Мы хотели бы поблагодарить Вадима Арзамасова за то, что он поделился набором данных, доступным в репозитории машинного обучения UCI, а также за исследование На пути к кратким моделям стабильности грид.
URL: https: //archive.ics .uci.edu / ml / datasets / Electrical + Grid + Stability + Simulated + Data +

В. Арзамасов, К. Бем и П. Йохем, К кратким моделям устойчивости сети, Международная конференция IEEE 2018 по коммуникационным, управляющим и вычислительным технологиям для интеллектуальных сетей (SmartGridComm), Ольборг, 2018 г. , стр. 1–6.
URL: http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8587498&isnumber=8587411