Як ми будували модель скорочення викидів CO2 за допомогою SOM (Kohonen Self-Organizing Maps)
Привіт, спільнота DOU! Мене звати Андрій Матвійчук, я консультант зі штучного інтелекту, нейро-нечітких систем та математичного моделювання в Infinity Technologies, професор кафедри штучного інтелекту, моделювання та статистики у Київському національному економічному університеті імені Вадима Гетьмана.
В цій публікації розповім, як ми з колегою — Оленою Житкевич (докторант цієї ж кафедри, де я її супервайзер) використали Kohonen Self-Organizing Maps (SOM) для кластеризації країн за потенціалом скорочення викидів CO2, і поділюсь технічними деталями реалізації — від збору даних до тренування нейромереж та здійснення сценарних розрахунків.
Що ми моделювали і навіщо
Задача полягала у кластеризації країн за профілем викидів CO2 з урахуванням економічних, енергетичних, торгових та демографічних показників. Мета дослідження — визначити лідерів і аутсайдерів у процесі декарбонізації, візуально показати прогрес країн у динаміці за період
Ми провели якісний аналіз можливостей, переваг та недоліків 12 як класичних статистичних, так і новітніх методів кластеризації з теорії машинного навчання, а також експериментальне дослідження їх ефективності на основі ряду спеціалізованих метрик. В результаті за основу для проведення дослідження було обрано метод Kohonen Self-Organizing Maps, який, на відміну від усіх інших алгоритмів кластеризації, однозначно вказує аналітику рівень розвитку того чи іншого об’єкта за досліджуваною ознакою (в цій задачі країни за потенціалом декарбонізації), адже найбільш та найменш розвинуті будуть розташовані в протилежних кутах карти Кохонена. І, відповідно, чим ближче країна знаходиться до кластеру найбільш розвинених, тим більш ефективно в ній реалізується політика переходу на зелену енергетику. І так за зміною розташування кожної країни на карті з плином часу можна відстежувати успіхи провадження такої політики по роках.
Технологічний стек:
- Python 3.9 (підготовка даних).
- NumPy / Pandas (робота з табличними даними).
- Scikit-learn (мінімально, для нормалізації).
- MiniSom (Python-реалізація Kohonen SOM).
- Deductor Studio Academic (візуалізація карти SOM — більш зручна GUI частина).
- Matplotlib / Seaborn (візуалізації heatmap’ів та профілів індикаторів).
- Jupyter Notebook (весь pipeline — інтерактивно).
Як ми це реалізували. Покроково
Збір даних для моделювання CO2-викидів
Першим етапом проєкту став збір і підготовка даних для подальшої кластеризації країн за їхніми профілями декарбонізації. Було проаналізовано широкий перелік баз даних та інформаційних ресурсів різноманітних міжнародних організацій і, зважаючи на відповідність наявних даних поставленій задачі, наповненості по показниках, роках та країнах, основними джерелами було обрано бази World Bank та звіти EnerData.
В результаті було сформовано вибірку за 14 показниками за період
Принципово важливо, що ми не використовували готові дані про викиди CO2 по країнах у чистому вигляді. Натомість ми створили агрегований набір факторів, який дозволяє більш точно описати структуру енергоспоживання та економічний контекст кожної країни.
Робочий процес збору даних:
1. Витягування даних з WDI API (World Bank)
Для збору даних було використано офіційний World Bank Data API (нижче наведемо деякі фрагменти коду).
import wbdata
import pandas as pd
import datetime
# Вибір індикаторів
indicators = {
’SP.URB.TOTL.IN.ZS’: ’Urban population %’,
’NY.GDP.PCAP.KD.ZG’: ’GDP per capita growth %’
}
# Вибір країн
countries = [«USA», «CHN», «UKR», «NOR», «SWE», «IND», ...] # ISO-коди 40 країн
# Період
data_date = (datetime.datetime(2013, 1, 1), datetime.datetime(2022, 12, 31))
# Отримання даних
wb_data = wbdata.get_dataframe(indicators, country=countries, data_date=data_date, convert_date=False)
# Трансформація у зручний формат
wb_data = wb_data.reset_index().pivot(index=[’country’, ’date’], columns=’indicator’, values=’value’)
2. Завантаження даних з EnerData Yearbook
EnerData не має API, тому дані доводилось завантажувати вручну та застосувати парсинг:
- Дані з EnerData Yearbook були завантажені у форматі Excel та конвертовано у CSV.
- Обробка Pandas-скриптами для приведення у формат: Country | Year | Indicator | Value.
import pandas as pd
# Завантаження даних
enerdata_df = pd.read_csv(’enerdata.csv’)
# Трансформація
enerdata_pivot = enerdata_df.pivot_table(index=[’Country’, ’Year’], columns=’Indicator’, values=’Value’)
Робота з Missing Data
В реальних базах даних пропуски в даних зустрічаються досить часто. Саме через те, щоб відкинути з аналізу країни з великою кількістю пропусків, базу даних було скорочено до 40 країн (ми залишали країни з пропущеними даними лише у випадку, якщо пропуски були не більше ніж у 10% ознак для цього запису). Тож навіть серед відібраних країн зустрічаються пропущені дані за окремими показниками як по окремих роках, так і систематично. Проблему пропусків ми вирішували такими способами:
Case 1: систематичні пропуски (структурно відсутні дані)
Якщо у нас взагалі немає даних по показнику для країни (наприклад, баланс торгівлі електроенергією для Казахстану):
- Розраховуємо середнє по групі країн, до якої відноситься країна з пропущеними даними (наприклад, EU, G7, CIS).
- Пропуски заповнюємо розрахованими значеннями.
# Заміна пропусків середнім значенням по групі (для Казахстану — CIS)
cis_mean_trade_balance = enerdata_pivot[enerdata_pivot[’Region’] == ’CIS’][’Electricity Trade Balance’].mean()
enerdata_pivot.loc[
(enerdata_pivot[’Country’] == ’Kazakhstan’) &
(enerdata_pivot[’Electricity Trade Balance’].isna()),
’Electricity Trade Balance’
] = cis_mean_trade_balance
Case 2: відсутні дані по роках
Іноді дані були не по всіх роках (наприклад, пропуск 2015 року для певної країни). Вирішували:
- Для показників з повільною динамікою (урбанізація, енергетична структура) — здійснювали linear interpolation.
- Для показників з високою варіативністю (CO2 emission factor) — замінювали середнім значенням по групі.
df[’Urban population %’] = df[’Urban population %’].interpolate(method=’linear’)
Case 3: викиди в даних і аномалії
Іноді ми отримували «викиди» в даних (наприклад, у WDI CO2 emission factor для Норвегії стрибав у 5 разів відносно сусідніх років). Проблема вирішувалась таким чином:
- Автоматичний outlier detection (Interquartile Range — IQR).
- Якщо помилка — перевіряли вручну і виправляли.
- Якщо підозріле значення виявилось реальною зміною — залишали.
Q1 = df[’CO2 emission factor’].quantile(0.25)
Q3 = df[’CO2 emission factor’].quantile(0.75)
IQR = Q3 — Q1
outliers = df[(df[’CO2 emission factor’] < (Q1 — 1.5 * IQR)) | (df[’CO2 emission factor’] > (Q3 + 1.5 * IQR))]
В результаті очистки та трансформації даних був сформований вихідний датасет, який складався з 400 записів (поєднання 40 країн і
Підготовка датасету для SOM: normalization, scaling, feature engineering
Після збору первинних даних (WDI + EnerData) ми отримали гетерогенний датасет, де значення різних індикаторів мали абсолютно різний порядок величин — наприклад, зростання ВВП вимірювалось у відсотках, споживання енергії — у тераджоулях, а фактор викидів — у тонах на мегават-годину.
Такий датасет некоректно одразу подавати на вхід SOM, оскільки нейрони почнуть орієнтуватись лише на ті фічі, які мають найбільші абсолютні значення (адже оптимізація базується на Евклідовій відстані між векторами вхідних даних та параметрів нейронів карти). Тому важливими етапами є масштабування та нормалізація ознак (feature scaling), а також підготовка нових значущих предикторів та забезпечення відсутності мультиколінеарності в наборі вхідних показників.
Основні етапи підготовки даних до моделювання:
- Feature engineering (створення нових фіч на основі наявних).
- Масштабування (scaling) через процедуру нормалізації.
- Перевірка кореляцій (щоб уникнути надлишкових ознак).
- Вибір ознак (feature selection).
- Побудова фінальної матриці ознак для SOM.
1. Feature Engineering
На основі первинних показників із відібраних баз даних нам довелось сформувати деякі додаткові предиктори, які є більш інформативними для вирішення поставленої задачі:
- Net Trade Balance (per energy type) = Export — Import.
- Energy Structure Factor — агрегований індекс, який враховує частку відновлюваної енергії та інтенсивність споживання.
Приклад агрегації Net Trade Balance:
df_scaled[’Net Coal Balance’] = df_scaled[’Coal Export’] - df_scaled[’Coal Import’]
df_scaled[’Net Oil Balance’] = df_scaled[’Oil Export’] - df_scaled[’Oil Import’]
df_scaled[’Net Gas Balance’] = df_scaled[’Gas Export’] - df_scaled[’Gas Import’]
2. Масштабування (Normalization & Scaling)
Масштабування проводили для кожної ознаки методом Min-Max Normalization до діапазону [0,1], оскільки:
- SOM чутлива до масштабів ознак.
- Нам важливо зберегти відносні пропорції всередині кожного показника.
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled_features = scaler.fit_transform(df[feature_columns])
df_scaled = pd.DataFrame(scaled_features, columns=feature_columns)
Зауважимо, що в ряді задач нормалізація може не привести до бажаного результату. В такому випадку для масштабування доречно застосувати процедуру Z-score standardization, яка зважує відхилення від середнього на стандартне відхилення. Ця процедура часто дозволяє отримати набір даних, придатних для ефективної кластеризації (коли інші методи підготовки даних виявились безсилими).
3. Перевірка кореляцій
Щоб уникнути дублювання ознак (позбутись мультиколінеарності в наборі вхідних даних), ми проаналізували кореляційну матрицю:
import seaborn as sns
import matplotlib.pyplot as plt
corr = df_scaled.corr()
plt.figure(figsize=(12,10))
sns.heatmap(corr, annot=True, cmap=’coolwarm’)
plt.show()
Висновки:
- Ознаки, кореляція між якими перевищувала 0.95, були об’єднані або замінені на агреговані фактори.
- Деякі показники хоч і були сильно корельовані (наприклад, Total energy consumption і Energy intensity), але ми залишили їх обидва, оскільки вони реалізують в різний спосіб свій вплив на процеси споживання енергії та декарбонізації.
4. Вибір ознак (Feature Selection)
В результаті проведеного аналізу ми залишили лише ті фічі, які мають найбільш значущий вплив на енергетичний профіль країни та її потенціал до декарбонізації. Причому намагались залишитись в межах до двох десятків показників, адже з ростом їх числа зменшується вплив кожного окремо (тож більш значущі предиктори, відібрані з самого початку, здійснюють все менший вплив на результат моделювання). В результаті було отримано базу з 14 показників:
- GDP per capita growth (%).
- Urban population (%).
- Total energy consumption.
- Energy intensity (energy use per unit of GDP).
- CO2 emission factor (tons CO2 per MWh).
- Balance of trade for: coal, oil, gas, electricity.
- Share of renewables in electricity generation.
- Domestic energy consumption of: coal/oil/gas/electricity.
5. Побудова фінальної матриці ознак для SOM
Перед подачею даних у модель SOM ми провели додаткові перевірки для впевненості у якості вхідного датасету. Ми проаналізували розподіли значень (distribution plots) для кожної ознаки, щоб переконатися у відсутності різких сплесків або, навпаки, плоских характеристик, які могли б негативно вплинути на тренування SOM, спотворюючи топологію мапи. У підсумку ми отримали фінальну матрицю ознак, збалансовану за масштабами, без надлишкових або дубльованих фіч, готову для подачі на Kohonen Self-Organizing Map.
Фінальний датасет виглядав як 2D-матриця:
- Рядки: 400 записів (40 країн * 10 років).
- Стовпці: 14 нормалізованих ознак (features).
X = df_scaled.values # фінальна матриця ознак для подачі в SOM
Побудова і тренування Self-Organizing Map: як ми «вчили» нейромережу бачити профілі країн
Після підготовки нормалізованого датасету ми перейшли до основного етапу — тренування Kohonen Self-Organizing Map. Цей метод дозволяє знайти приховані патерни у багатовимірних даних і візуалізувати їх у вигляді 2D-карти, де схожі між собою об’єкти (в нашому випадку — країни) опиняються поруч.
Який інструмент ми використали:
- Python MiniSom — досить проста але потужна бібліотека для побудови Kohonen Maps.
- Для візуалізації — Matplotlib, Seaborn, а також Deductor Studio Academic для побудови інтерактивних U-Matrix heatmaps.
Конфігурація Self-Organizing Map
Один з найважливіших етапів проєкту — підбір розмірів карти та гіперпараметрів для тренування моделі. Розмір карти було визначено як 16×12 нейронів, що становить 192 нейрони загалом. Такий вибір ґрунтується на емпіричному правилі розрахунку оптимальної кількості нейронів: M ≈ 5 × √N, де M — кількість нейронів, а N — кількість об’єктів у датасеті. Оскільки у нашому випадку N дорівнює 400 (40 країн по 10 років), оптимальна кількість нейронів має знаходитись у межах
from minisom import MiniSom
som = MiniSom(x=16, y=12, input_len=14, sigma=1.0, learning_rate=0.5,
neighborhood_function=’gaussian’, random_seed=42)
Інші параметри:
- input_len=14 — кількість ознак (фічей).
- sigma=1.0 — початковий радіус зони впливу нейрона.
- learning_rate=0.5 — початкова швидкість навчання (з кожною ітерацією знижується).
- neighborhood_function=’gaussian’ — плавне затухання впливу вектора вхідних даних по мірі віддалення від нейрона-переможця.
Оптимізація параметрів карти
Модель навчалась у режимі random batch learning із загальною кількістю епох 5,500. Вибір випадкового підходу до навчання був обумовлений тим, що це дозволяє уникнути так званого «замороження» карти, коли фіксовані послідовності подачі векторів даних можуть призвести до втрати гнучкості у формуванні топології карти. Кожна епоха передбачала випадковий вибір об’єкта навчання — вектор даних по окремій країні у певному році. Після вибору об’єкта відбувалося оновлення ваг нейрона-переможця (Best Matching Unit) та його сусідів відповідно до функції навчання.
som.random_weights_init(X) # Ініціалізація ваг нейронів випадковими значеннями з датасету
som.train_random(X, num_iteration=5500) # Навчання
Під час навчання контрольованими параметрами були:
- Quantization Error (QE) — міра невідповідності об’єктів нейронам-переможцям, що розраховується як середня відстань між вхідними даними і параметрами найближчого нейрона.
- Topographic Error (TE) — метрика оцінки здатності SOM зберігати топологічну структуру даних, яка розраховується через відсоток точок вхідних даних, для яких дві BMU (найкраща та друга найкраща) на карті SOM не є прямими сусідами на структурі сітки карти.
qe = som.quantization_error(X)
te = som.topographic_error(X)
print(f’Quantization Error: {qe}, Topographic Error: {te}’)
Наш таргет QE < 0.2, TE < 0.1 свідчить, що SOM адекватно відображає патерни і не спотворює структуру сусідства.
Оптимізація кількості кластерів
Self-Organizing Maps самі по собі не виконують явної кластеризації даних, а проєктують багатовимірні дані у 2D-простір із збереженням топології, тож для виділення окремих груп об’єктів ми додатково провели кластеризацію нейронів на основі їхніх вагових векторів. Для цього застосовували Agglomerative Clustering. Причому в цьому процесі паралельно проводилась оптимізація кількості кластерів, під час якої вже сформована карта Кохонена карти почергово розбивалась на різну кількість кластерів у діапазоні від 3 до 8. Це важливий етап дослідження, адже за неправильного визначення кількості кластерів модель або занадто укрупнює групи об’єктів, що унеможливлює виявлення особливостей окремих патернів, або втратить інтерпретованість за надто великої кількості груп.
Точність сегментації оцінювалась на основі трьох стандартних критеріїв — коефіцієнту силуету, індексів Девіса-Болдіна та Калінскі-Харабаша, а також інтегрального показника на їх основі. В результаті вибір зупинився на шести кластерах, які найбільш релевантно сегментували країни за профілями декарбонізації. Вони дозволили виділити групи лідерів, послідовників, проблемних країн тощо.
Отже, описаний вище підхід до побудови карти Кохонена та проведення кластеризації на її основі зводиться до виконання таких етапів:
Крок 1: візуальна оцінка через U-Matrix
Після оптимізації SOM було побудовано U-Matrix (Unified Distance Matrix) — теплову карту, де кольором відображається відстань між векторами ваг сусідніх нейронів. Зони з низькою дистанцією свідчать про щільно згруповані нейрони, що є потенційними кластерами, тоді як області з високими значеннями дистанції окреслюють межі між відокремленими групами. Аналізуючи U-Matrix, ми виявили шість чітко виражених зон, які візуально виглядали як окремі «острови» на карті. Ці зони і стали основою для подальшої інтерпретації кластерів країн за їхніми профілями декарбонізації, що далі було підтверджено кількісними метриками.
from pylab import bone, pcolor, colorbar, plot, show
bone()
u_matrix = som.distance_map().T # Відстані між нейронами (U-Matrix)
pcolor(u_matrix) # Візуалізація карти
colorbar() # Легенда кольорів
show()
Крок 2: агломеративна кластеризація по векторах ваг нейронів
Кожен нейрон SOM має свій вектор ваг, що складається з 14 елементів за кількістю фіч. Ми взяли всі ці вектори (для кожного із 192 нейронів) і кластеризували їх за допомогою методу ієрархічної кластеризації.
from scipy.cluster.hierarchy import linkage, fcluster
from scipy.spatial.distance import pdist
weights = som.get_weights().reshape(-1, 14) # Витягуємо всі ваги нейронів
Z = linkage(weights, method=’ward’) # Ієрархічна кластеризація вагових векторів
При цьому ми здійснювали оцінку роздільної здатності за різної кількості кластерів (K=3...8).
Крок 3: валідація за метриками (коефіцієнт силуету, індекси Девіса-Болдіна та Калінскі-Харабаша)
Щоб визначити оптимальну кількість кластерів (K), ми використали три стандартні метрики оцінки якості кластеризації та додатково інтегральний критерій на їх основі. Коефіцієнт силуету (Silhouette coefficient — SC) варіюється від −1 до 1 і показує, наскільки об’єкти схожі на свій кластер більше, ніж на сусідній (чим ближче до 1, тим краща сегментація). Індекс Калінскі-Харабаша (Calinski-Harabasz index — CHI) теж чим вищий, тим краща кластеризація (приймає значення від нуля і вище), і обчислюється як відношення міжкластерної варіації до дисперсії даних всередині кластерів.
А в індексі Девіса-Болдіна (Davies-Bouldin Index — DBI), навпаки, менше значення вказує на кращу якість кластерів, оскільки розраховується як максимальне значення серед усіх можливих пар кластерів відношення їх внутрішньокластерних дисперсій до відстані між кластерами (теж приймає значення вище нуля). У ході тестування ми отримали такі результати для різної кількості кластерів K:
- K=3: SC = 0.33, DBI = 1.09, CHI = 227.37.
- K=4: SC = 0.25, DBI = 1.09, CHI = 182.87.
- K=5: SC = 0.34, DBI = 0.37, CHI = 261.31.
- K=6: SC = 0.44, DBI = 0.90, CHI = 290.43.
- K=7: SC = 0.34, DBI = 0.87, CHI = 248.23.
- K=8: SC = 0.26, DBI = 1.00, CHI = 215.51.
Як можна бачити, за двома метриками — коефіцієнтом силуету та індексом Калінскі-Харабаша найбільш ефективна сегментація проведена у випадку розбиття масиву даних на 6 кластерів (адже ці показники у такому випадку мають найбільші значення). За індексом Девіса-Болдіна більш ефективна кластеризація відбулась у випадку групування на 5 кластерів, адже тоді він приймає найменше значення. Тож дві з трьох метрик вказують на доцільність розподілу даних на 6 кластерів, а одна метрика — на 5. Таким чином, за кількісною оцінкою значення K=6 продемонструвало найкращий баланс між внутрішньою однорідністю кластерів та їх відокремленістю, що дозволило зупинитись саме на цій конфігурації для фінальної моделі.
Крок 4: Семантична валідація
Цей етап є важливою допоміжною перевіркою для будь-якого завдання кластеризації без учителя (unsupervised learning), оскільки передбачає аналіз осмисленості отриманих груп. Тут ми перевіряємо, наскільки логічно проведена сегментація, чи відповідають кластери реальним економічним і енергетичним профілям країн.
Для цього ми визначили середні значення кожного з показників для кожного кластера, що дозволило отримати узагальнений портрет типової країни всередині групи. Далі порівнюються отримані профілі різних кластерів, щоб можна було виявити, скажімо, лідерів, яким притаманний високий відсоток відновлюваної енергетики з низькою енергоємністю, або ж профіль ресурсно-орієнтованих економік з високою часткою викопного палива у структурі споживання та значними викидами CO2. Такий підхід дозволив не лише перевірити адекватність отриманих кластерів, але й дати їм змістовну економічну інтерпретацію, що важливо для практичного застосування моделі.
Як зазначено вище, при розподілі країн за шістьма кластерами ми отримали найбільш збалансовану та інтерпретовану структуру, де чітко виділились такі групи:
- Лідери — декарбонізаційні хаби (Канада, Нова Зеландія, Норвегія, Швеція, та ін.) — країни з високою часткою відновлюваної енергетики та низькою енергоємністю.
- Послідовники (Великобританія, країни ЄС, розвинені країни Латинської Америки) — демонструють прогрес у декарбонізації, але все ще значною мірою залежать від традиційних джерел енергії.
- Ресурсно-орієнтовані економіки (Нігерія, ОАЕ, Саудівська Аравія, Україна, та інші) — країни з великою енергоємністю ВВП та залежністю від викопного палива.
- Промислові країни (Австралія, Індія, Німеччина, Польща, Туреччина, Японія, та ін.) — визначаються великою енергоємністю ВВП, значними викидами CO2 та відносно низькою часткою відновлюваних джерел.
- Вуглеводневі країни (росія, США) — характеризуються великими обсягами видобутку нафти і газу та їх внутрішнього споживання.
- Великі індустріальні країни (Китай, США) — характеризуються найбільшим споживанням енергії в цілому та вугілля і електроенергії зокрема, мають високі викиди CO2, але водночас інвестують у відновлювану енергетику.
Оскільки кожна країна представлена десятьма записами (по одному на кожен рік досліджуваного періоду), то деякі країни в різні роки могли знаходитись в різних кластерах, змінюючи свій енергетичний профіль.
Зазначимо, що при збільшенні кількості кластерів понад 6 групи ставали занадто дрібними, втрачаючи цілісність та аналітичну цінність. Натомість при зменшенні кількості кластерів нижче 6 спостерігалося штучне об’єднання країн з принципово різними енергетичними профілями, що ускладнювало інтерпретацію результатів. Надалі ці групи стали основою для побудови сценаріїв розвитку та аналізу динаміки переміщення країн між кластерами у часі, що дозволило оцінити прогрес або стагнацію у зусиллях з декарбонізації національних економік.
Підсумовуючи етап оптимізації SOM, можна виділити кілька ключових результатів. По-перше, нам вдалось побудувати двовимірну карту, яка зберігає топологію багатовимірних даних, дозволяючи візуально аналізувати взаємозв’язки між країнами. По-друге, U-Matrix забезпечила видимість логічних зон кластеризації, допомагаючи визначити межі між групами. По-третє, отримані результати візуально підтвердили наші гіпотези — країни зі схожими між собою профілями потрапили в ті самі зони карти. Важливо, що кількість кластерів визначалась не лише за формальними метриками, а й з урахуванням семантичної відповідності, тобто наскільки така сегментація є логічною і релевантною для аналізу процесів декарбонізації.
Візуальна аналітика результатів кластеризації SOM: теплові карти, динаміка переміщення країн, інтерактивні дашборди
Self-Organizing Map — це в першу чергу засіб візуалізації, що є ефективним інструментом дослідження закономірностей в складних багатовимірних структурах даних та їх візуального представлення.
У нашому проєкті ми виділили три рівні візуальної аналітики:
- Теплові карти (heatmaps) по ознаках (фічах).
- Траєкторії переміщення країн по карті Кохонена — як змінювався профіль країни у часі.
- Інтерактивні дашборди для дослідників і бізнесу (Deductor Studio + Plotly Dash).
1. Теплові карти по ознаках (Feature Heatmaps)
В процесі оптимізації карти кожен нейрон набув значення вагових параметрів залежно від об’єктів (країн), які були віднесені до нього чи його сусідів під час навчання. Кожна вага нейрона відповідає одній з 14 відібраних ознак.
Для кожного такого параметру за всіма нейронами SOM будується теплова карта (heatmap), що надає можливість візуально ідентифікувати зони з високими та низькими значеннями відповідної характеристики на поверхні SOM. Величина кожної характеристики відображається кольором від синього (найменші) до червоного (найбільші), значення яких можна побачити на кольоровій лінійці під відповідною тепловою картою.

Теплові карти забезпечили інструмент для дослідження просторових патернів ключових показників серед країн, розподілу профілів країн на карті та ідентифікації локальних закономірностей, які складно виявити при стандартному аналізі таблиць даних, особливо за великої кількості характеристик.
Візуалізація позиції кожної країни на SOM дозволила побачити їхнє розташування по кластерах. Це дало змогу ідентифікувати країни, які знаходяться в «ядрі» кластерів, тобто мають яскраво виражений типовий профіль декарбонізації. Водночас було визначено країни, які лежать на межах між кластерами, що свідчить про їхні гібридні профілі — поєднання характеристик з різних груп, або ж про поступовий перехід від однієї стратегії декарбонізації до іншої. Такий підхід дозволив виявити не лише явних лідерів і аутсайдерів, а й ті країни, які перебувають у процесі трансформації свого енергетичного профілю.
2. Динаміка переміщення країн на SOM (2013–2022)
Однією з унікальних можливостей Self-Organizing Maps є візуалізація траєкторій руху об’єктів в просторі ознак у часі, що дозволяє простежити, як країни змінювали свій профіль декарбонізації протягом
plt.figure(figsize=(10,8))
plt.title(’Trajectory of Ukraine (2013-2022)’)
coords = []
for year in range(2013, 2023):
country_year_data = df[(df[’Country’] == ’Ukraine’) & (df[’Year’] == year)].iloc[0][feature_columns].values
winner = som.winner(country_year_data)
coords.append(winner)
# Малюємо траєкторію руху
for i in range(len(coords)-1):
plt.arrow(coords[i][0]+0.5, coords[i][1]+0.5,
coords[i+1][0]-coords[i][0], coords[i+1][1]-coords[i][1],
head_width=0.3, head_length=0.3, fc=’blue’, ec=’blue’)
plt.pcolor(som.distance_map().T, cmap=’Greys’, alpha=0.3)
plt.show()

Така візуалізація дає змогу не лише бачити статичний стан, а й аналізувати динаміку кожної країни за напрямом декарбонізації.
Ми зафіксували кілька характерних патернів поведінки:
- Країни, які традиційно активно впроваджували політику декарбонізації, продовжили посилювати свої позиції протягом досліджуваного періоду. При цьому всі країни в кластері лідерів (правий нижній кут карти) залишались весь досліджуваний період тільки в цьому кластері. Послідовники (правий верхній кут карти) теж залишались в своєму кластері, хоч і було помітне поступове зміщення у напрямку лідерів, що свідчить про реальний прогрес у трансформації енергетичної інфраструктури та зменшенні викидів.
- Країни з найбільшим споживанням енергії в двох кластерах в лівій частині карти теж залишались досить стійкими. Проте США перейшли з крайнього лівого кластеру, де були поруч з Китаєм, до кластеру з росією. Але це пов’язано не стільки з діями США, скільки з випереджальним індустріальним розвитком Китаю, на фоні якого США за аналізованими показниками перейшли в інший кластер, який ми умовно назвали «вуглеводневі країни».
- Хоч більшість країн в кластерах центральної частини карти Кохонена теж не покидали своїх кластерів, проте якщо і були якісь помітні переміщення (зміна енергетичних профілів країн), то вони спостерігались саме тут. Наприклад, Великобританія та деякі країни Латинської Америки перейшли з кластеру промислових країн (в лівій нижній частині карти) до послідовників, поліпшивши свої позиції в контексті декарбонізації. Україна ж з кластеру промислових в 2015 році зробила різкий стрибок в кластер «ресурсно-орієнтованих економік» в верхній середній частині карти, де і була до кінця досліджуваного періоду, переміщаючись між різними нейронами кластеру.
3. Інтерактивні дашборди (Deductor Studio + Plotly Dash)
Deductor Studio Academic
Спочатку в рамках даного етапу ми використали Deductor Studio, оскільки ця платформа дозволяє інтерактивно працювати з U-Matrix і наносити теги без необхідності написання коду. Водночас платформа має низку обмежень. Зокрема, можливості кастомізації візуалізацій досить обмежені, що ускладнює налаштування більш складних сценаріїв або специфічного дизайну відображення даних. Крім того, Deductor Studio неможливо інтегрувати в онлайн-середовище для подальшого використання у вебдодатках або дашбордах, що стало вагомим фактором для переходу на більш гнучкі інструменти.
Plotly Dash (Roadmap for Production)
Тож було вирішено перенести візуалізацію результатів кластеризації у формат вебдашборду на основі Power BI. Це дало змогу забезпечити інтерактивний інтерфейс, де користувач міг обирати конкретну країну та бачити її траєкторію руху по карті SOM у часі, фільтрувати дані за роками або кластерами, а також аналізувати heatmaps із можливістю динамічного налаштування відображення. Процес реалізації виглядав таким чином:
- Генерація координат об’єктів (країн) на карті SOM у Python та імпорт результатів у Power BI.
- Побудова теплових карт за допомогою вбудованих візуалізацій Power BI та кастомних елементів з Marketplace.
- Відображення траєкторій руху країн у вигляді scatter/line charts для демонстрації переміщень по нейронах у динаміці.
- Додавання інтерактивних фільтрів через Slicers та Dropdowns, що дозволяє користувачеві налаштовувати видимість об’єктів за роками, країнами та кластерами.
Результати цього етапу дозволили:
- Використати heatmaps для виявлення «гарячих зон» кожного фактора декарбонізації та побачити, де зосереджені проблемні або прогресивні регіони.
- Візуалізувати траєкторії переміщення країн по SOM у часовій динаміці, що стало основою для оцінки ефективності національних енергетичних політик.
- Залучити до роботи з моделлю не лише технічних спеціалістів (дата-сайентистів), але й бізнес-аналітиків, завдяки інтерактивності та зрозумілості інтерфейсу.
Сценарне моделювання: як ми перетворили SOM у бізнес-рішення для декарбонізації
Отже, ми побудували Self-Organizing Map, виділили 6 кластерів і візуалізували їх. Наступним завданням було зрозуміти, що ці кластери означають для стратегій декарбонізації, та як їх можна використати для сценарного моделювання (what-if analysis). Тож після завершення кластеризації країн ми провели серію симуляцій, щоб змоделювати, як зміна окремих параметрів вплине на положення країни на карті кластерів.
Методика моделювання виглядала так:
- Ми брали поточний профіль країни — вектор значень характеристичних показників, і вручну модифікували їх значення, зокрема збільшували «Share of renewables in electricity» на 10% чи зменшували «Energy intensity of GDP» на 20%.
- Новий профіль проганяли через функцію SOM.winner(), яка дозволяла визначити, чи переміститься країна до іншого нейрона, а відповідно — чи зміниться її кластер.
- Результати моделювання заносились в інтерактивну матрицю змін, яка відповідала на питання: «Які конкретно параметри потрібно змінити в енергетичній структурі країни, щоб вона перемістилась у бажаний кластер (наприклад, у групу лідерів декарбонізації)?». Зазначимо, що тут підказкою були середні значення всіх цих показників для кластеру країн-лідерів.
Цей підхід дозволив перейти від простої кластеризації до практичного сценарного аналізу, показуючи, які структурні зміни є найбільш критичними для досягнення цільового профілю країни.
modified_profile = original_profile.copy()
modified_profile[’Share of Renewables’] += 0.1 # +10% до частки відновлювальної енергетики
modified_profile[’Energy Intensity’] *= 0.8 # −20% від енергетичної інтенсивності
new_cluster = som.winner(modified_profile.values)
Сценарне моделювання на основі результатів кластеризації дозволяє сформулювати рекомендації зі стратегічного планування для різних груп країн. Наприклад, для країн кластеру, який ми умовно позначили як ресурсно-орієнтовані економіки, де останніми роками була Україна, ключовим фактором поліпшення глобального позиціонування в сфері декарбонізації є інвестиції у відновлювану енергетику — лише за умови зростання частки відновлювальних джерел енергії ці країни можуть перейти у кластери послідовників чи лідерів (в бік правого нижнього кута карти). Адже, скажімо, у кластері лідерів в зеленій енергетиці є такі потужні експортери ресурсів (в тому числі вуглеводнів), як Канада, Норвегія, тощо.
Щодо великих індустріальних країн (США, Китай), сценарне моделювання показало, що навіть значне збільшення частки відновлюваної енергетики не призведе до переходу у більш «зелені» кластери без одночасного агресивного зниження енергетичної інтенсивності. Це вказує на необхідність впровадження комплексної політики енергозбереження. Це ж стосується і росії, яка хоч і знаходиться в кластері великих вуглеводневих країн, проте межує з кластером ресурсно-орієнтованих економік (тобто, має ознаки, характерні профілю країн цього кластеру).
Подібним чином для кожної країни можна підібрати власні рекомендації залежно від її поточного стану та цільових показників, які стоять перед нею в плані реалізації політики декарбонізації.
Загалом, динамічне сценарне моделювання дозволило не просто сегментувати країни, а й чітко показати урядам, бізнесу та аналітикам, які параметри є найбільш чутливими точками впливу для покращення позицій у глобальній декарбонізації. Це формує практичну основу для розробки таргетованих стратегій розвитку енергетичного сектору окремих країн світу.
Як масштабувати SOM для real-time аналізу
Якщо виникає прикладна задача відстежувати зміни профілю країни (або інших досліджуваних об’єктів) в реальному часі, першим кроком стає інтеграція SOM з потоковими системами обробки даних, такими як Kafka, Flink, тощо. Дані надходитимуть у реальному часі, а архітектура, побудована на основі Growing SOM або Adaptive SOM, дозволить динамічно оновлювати позицію об’єкта на карті в міру зміни показників.
Для забезпечення постійного оновлення моделі з надходженням нових даних застосовується підхід Incremental SOM, або on-line learning.
Інтеграція SOM у BI-аналітиці реалізується через мікросервісну архітектуру, де SOM буде відповідати за обробку нових даних і позиціонування об’єктів на карті, а інтерактивні дашборди (наприклад, на базі Plotly Dash або Power BI Embedded) відображатимуть оновлені результати для користувачів.
Висновок
Реалізований проєкт, присвячений дослідженню потенціалу декарбонізації країн світу, продемонстрував можливості Self-Organizing Maps не тільки як інструменту для кластеризації та візуалізації багатовимірних даних, але й ефективного засобу для формування профілів досліджуваних об’єктів (в нашому випадку енергетичних профілів країн), сценарного моделювання та виявлення найбільш ефективних точок впливу для досягнення цільових показників (зниження викидів CO2). Цей підхід дозволяє виявляти приховані патерни у структурі вхідних даних. Візуалізація траєкторій переміщення країн допомагає досліджувати динаміку впровадження політик і оцінювати їхню ефективність у довгостроковій перспективі. Використовуючи сценарне моделювання на основі SOM, ми змогли проаналізувати, які з характеристичних показників країн мають найбільший вплив на їх позицію у глобальному «декарбонізаційному полі» і які дії доцільно вживати для покращення енергетичного профілю та досягнення цілей зеленої енергетики, що стоять перед країною.
Точність сегментації оцінювалась на основі трьох стандартних критеріїв — коефіцієнту силуету, індексів Девіса-Болдіна та Калінскі-Харабаша, а також шляхом проведення якісного аналізу на семантичну відповідність (наскільки така сегментація є логічною для дослідження процесів декарбонізації). В результаті вибір зупинився на шести кластерах, які найбільш релевантно сегментували країни за профілями декарбонізації. Вони дозволили виділити групи лідерів, послідовників, ресурсно-орієнтованих економік тощо.
Надалі ці групи стали основою для побудови сценаріїв розвитку та аналізу динаміки переміщення країн між кластерами у часі, що дозволило оцінити прогрес або стагнацію у зусиллях з декарбонізації національних економік, а також формувати національні політики в напрямку зеленої енергетики з урахуванням результатів сценарних розрахунків.
Водночас цей підхід має свої обмеження. SOM не є класичною прогнозною моделлю, яка може дати точний прогноз викидів CO2 через декілька років — вона лише показує структуру даних і їхнє взаємне розташування.
Тож подальший розвиток проєкту передбачає розробку ієрархічної багаторівневої моделі, коли після сегментації країн на окремі кластери для кожного з них будуватимуться власні прогнозні моделі (регресійні, нейромережеві, тощо). Це забезпечить більшу стійкість та точність таких моделей внаслідок їх побудови на розширених масивах однорідних даних (за рахунок збільшення в навчальній вибірці спостережень, які відносяться до одного профілю поведінки досліджуваних об’єктів).
Додатково планується застосувати нечітку кластеризацію, яка дозволить при сегментації країн встановити міру, з якою кожна країна належить кожному з отриманих кластерів (незалежно від того, куди її було віднесено). Це дасть можливість при прогнозуванні її розвитку застосувати не одну модель, розроблену для цього кластеру, а ансамбль моделей, побудованих для всіх кластерів, тільки з різною мірою впливу. Це дасть більшу адаптивність прогнозної моделі, збільшить її ефективність та стійкість.
Наступним кроком стане інтеграція з реальними джерелами даних про торгівлю енергоносіями через відкриті API, наприклад Eurostat чи IEA. Фінальною ціллю є створення аналітичної платформи, яка функціонуватиме у режимі реального часу та буде доступною для державних органів та енергетичних компаній для підтримки прийняття стратегічних рішень.
Зараз наша команда в Infinity Technologies активно використовує цей підхід для моделювання та візуалізації складних процесів в різних сферах — макроекономіці, інвестиційній та інноваційній діяльності, освітній галузі, аграрній та фармацевтичній індустріях тощо, де Self-Organizing Maps допомагають виявляти приховані закономірності у потоках даних і підтримують оптимізацію внутрішніх процесів, ланцюгів постачання, прогнозування дефіцитів та аналізу ефективності виробничих сценаріїв.
Повна версія статті англійскою за посиланням.
7 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів