에너지/유틸리티 데이터 분석 가이드¶
개요¶
에너지 산업의 데이터 분석은 수요 예측, 그리드 최적화, 재생에너지 통합, 에너지 효율화를 목표로 한다. 스마트 미터, 센서, 날씨 데이터를 활용하여 지속 가능한 에너지 시스템을 구현한다.
핵심 분석 영역¶
| 영역 | 목표 | 핵심 지표 |
|---|---|---|
| 수요 예측 | 전력 수요 예측 | MAPE, 피크 예측 정확도 |
| 그리드 최적화 | 송배전 효율화 | 손실률, 신뢰도 |
| 재생에너지 | 발전량 예측 | 태양광/풍력 예측 정확도 |
| 에너지 효율 | 소비 최적화 | kWh/m2, PUE |
| 고객 분석 | 요금제 최적화 | 고객 세분화, LTV |
주요 분석 기법¶
1. 전력 수요 예측 (Load Forecasting)¶
예측 유형:
| 유형 | 예측 기간 | 용도 |
|---|---|---|
| 초단기 | 분~시간 | 실시간 급전 |
| 단기 | 일~주 | 운영 계획 |
| 중기 | 월~년 | 설비 투자 |
| 장기 | 5년 이상 | 인프라 계획 |
핵심 피처:
| 카테고리 | 피처 | 영향도 |
|---|---|---|
| 시간 | 시간, 요일, 월, 공휴일 | 매우 높음 |
| 기상 | 기온, 습도, 풍속 | 높음 |
| 경제 | GDP, 산업생산지수 | 중간 (장기) |
| 이력 | 전년 동기, 전주 동기 | 높음 |
모델링 접근:
from prophet import Prophet
import pandas as pd
# Prophet 모델 (계절성 + 휴일 효과)
def forecast_load(df, periods=24*7):
model = Prophet(
yearly_seasonality=True,
weekly_seasonality=True,
daily_seasonality=True,
holidays=holidays_df
)
# 기상 변수 추가
model.add_regressor('temperature')
model.add_regressor('humidity')
model.fit(df)
future = model.make_future_dataframe(periods=periods, freq='H')
future['temperature'] = forecast_temperature(future['ds'])
future['humidity'] = forecast_humidity(future['ds'])
return model.predict(future)
딥러닝 접근:
import tensorflow as tf
# LSTM 기반 수요 예측
def build_lstm_model(seq_length, n_features):
model = tf.keras.Sequential([
tf.keras.layers.LSTM(128, return_sequences=True,
input_shape=(seq_length, n_features)),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.LSTM(64),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(24) # 24시간 예측
])
model.compile(optimizer='adam', loss='mse')
return model
2. 재생에너지 발전량 예측¶
태양광 발전 예측:
| 입력 | 출력 | 모델 |
|---|---|---|
| 일사량, 기온, 구름 | 시간별 발전량 | 물리 + ML 하이브리드 |
| 과거 발전 패턴 | 일별 발전량 | 시계열 모델 |
| 위성 이미지 | 구름 이동 예측 | CNN |
물리 기반 모델:
def pv_power_output(irradiance, temp_ambient, panel_specs):
"""
태양광 발전량 계산 (단순화)
Parameters:
- irradiance: 일사량 (W/m2)
- temp_ambient: 외기 온도 (°C)
- panel_specs: 패널 사양
"""
# 셀 온도 계산
NOCT = panel_specs['NOCT'] # 공칭 동작 셀 온도
temp_cell = temp_ambient + (NOCT - 20) * irradiance / 800
# 온도 보정
temp_coeff = panel_specs['temp_coeff'] # %/°C
temp_loss = 1 + temp_coeff * (temp_cell - 25) / 100
# 발전량 계산
efficiency = panel_specs['efficiency']
area = panel_specs['area']
power = irradiance * area * efficiency * temp_loss
return power
풍력 발전 예측:
def wind_power_curve(wind_speed, turbine_specs):
"""
풍력 발전량 계산 (출력 곡선 기반)
"""
cut_in = turbine_specs['cut_in'] # 시동 풍속
rated = turbine_specs['rated_speed'] # 정격 풍속
cut_out = turbine_specs['cut_out'] # 정지 풍속
rated_power = turbine_specs['rated_power']
if wind_speed < cut_in or wind_speed > cut_out:
return 0
elif wind_speed >= rated:
return rated_power
else:
# 3승 법칙 (단순화)
return rated_power * ((wind_speed - cut_in) / (rated - cut_in)) ** 3
3. 스마트 미터 데이터 분석¶
AMI 데이터 활용:
| 분석 유형 | 목적 | 방법 |
|---|---|---|
| 부하 프로파일 | 소비 패턴 분류 | 클러스터링 |
| 이상 탐지 | 도전/고장 감지 | 통계적 이상치 |
| 수요 반응 | DR 효과 측정 | 인과 추론 |
| 세분화 | 요금제 설계 | RFM, 군집 |
부하 프로파일 클러스터링:
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
def cluster_load_profiles(hourly_data):
"""
24시간 부하 프로파일 클러스터링
"""
# 일별 프로파일로 변환
profiles = hourly_data.pivot(
index='date',
columns='hour',
values='consumption'
)
# 정규화
scaler = StandardScaler()
profiles_scaled = scaler.fit_transform(profiles)
# 클러스터링
kmeans = KMeans(n_clusters=5, random_state=42)
labels = kmeans.fit_predict(profiles_scaled)
return labels, kmeans.cluster_centers_
이상 탐지:
from sklearn.ensemble import IsolationForest
def detect_anomalies(consumption_data, contamination=0.01):
"""
전력 소비 이상 탐지
"""
features = [
'consumption',
'consumption_rolling_mean',
'consumption_vs_historical',
'temperature',
'is_weekend'
]
model = IsolationForest(contamination=contamination, random_state=42)
anomalies = model.fit_predict(consumption_data[features])
return consumption_data[anomalies == -1]
4. 그리드 최적화¶
배전망 손실 분석:
| 손실 유형 | 원인 | 대책 |
|---|---|---|
| 기술 손실 | 저항, 변압 | 설비 업그레이드 |
| 비기술 손실 | 도전, 계량 오차 | 모니터링 강화 |
| 코로나 손실 | 고압선 | 설계 개선 |
최적 조류 계산 (OPF):
# PyPSA 활용 예시
import pypsa
def optimize_power_flow(network):
"""
최적 조류 계산
"""
network = pypsa.Network()
# 버스 (노드) 추가
network.add("Bus", "bus1", v_nom=110)
network.add("Bus", "bus2", v_nom=110)
# 발전기 추가
network.add("Generator", "gen1",
bus="bus1",
p_nom=100,
marginal_cost=50)
# 부하 추가
network.add("Load", "load1",
bus="bus2",
p_set=80)
# 선로 추가
network.add("Line", "line1",
bus0="bus1",
bus1="bus2",
x=0.1,
s_nom=100)
# 최적화
network.lopf()
return network
5. 에너지 효율 분석¶
건물 에너지 성능:
| 지표 | 정의 | 벤치마크 |
|---|---|---|
| EUI | kWh/m2/년 | 업종별 상이 |
| PUE | 총 에너지/IT 에너지 (데이터센터) | < 1.4 |
| COP | 냉난방 효율 | > 3.0 |
M&V (Measurement & Verification):
def calculate_energy_savings(baseline_model, post_data):
"""
에너지 절감량 계산 (IPMVP Option C)
"""
# 기준선 모델로 예측
baseline_prediction = baseline_model.predict(post_data[['temperature', 'occupancy']])
# 실제 소비량
actual_consumption = post_data['consumption']
# 절감량
savings = baseline_prediction - actual_consumption
# 불확실성 계산
uncertainty = calculate_uncertainty(baseline_model, post_data)
return {
'total_savings': savings.sum(),
'savings_percentage': savings.sum() / baseline_prediction.sum() * 100,
'uncertainty': uncertainty
}
데이터 소스 및 아키텍처¶
에너지 데이터 플로우¶
[AMI/SCADA] → [데이터 수집] → [시계열 DB] → [분석 플랫폼]
│ │ │ │
- 전력량 - 검증 - InfluxDB - 예측 모델
- 전압 - 집계 - TimescaleDB - 대시보드
- 역률 - 변환 - Cassandra - 알림
- 이벤트
핵심 데이터 소스¶
| 소스 | 데이터 | 주기 |
|---|---|---|
| AMI | 전력 소비량, 전압 | 15분~1시간 |
| SCADA | 변전소 상태, 조류 | 초~분 |
| 기상청 | 기온, 습도, 일사량 | 시간 |
| DER | 태양광/ESS 상태 | 분 |
| GIS | 설비 위치, 토폴로지 | 정적 |
KPI 대시보드¶
수급 현황¶
| 지표 | 계산 | 목표 |
|---|---|---|
| 현재 수요 | 실시간 집계 | 예비율 > 10% |
| 피크 수요 | 일 최대 | 예측 대비 ±5% |
| 재생에너지 비율 | RE / 총 발전 | > 30% |
| 계통 주파수 | 실시간 측정 | 60 ± 0.2 Hz |
설비 상태¶
| 지표 | 계산 | 알림 기준 |
|---|---|---|
| 변압기 부하율 | 현재/정격 | > 80% |
| 선로 손실률 | 손실/송전 | > 5% |
| 정전 시간 | SAIDI/SAIFI | 규제 기준 |
규제 및 표준¶
전력 시장 규제¶
| 규제 | 내용 | 분석 요소 |
|---|---|---|
| RPS | 재생에너지 의무 비율 | RE 발전량 추적 |
| 탄소배출권 | 배출권 거래 | 탄소 회계 |
| 요금 규제 | 요금 인가 | 원가 분석 |
데이터 표준¶
| 표준 | 용도 |
|---|---|
| CIM (IEC 61970) | 전력계통 모델링 |
| DLMS/COSEM | 스마트 미터 통신 |
| OpenADR | 수요 반응 |
참고 자료¶
- EPRI (Electric Power Research Institute)
- IEA Energy Statistics
- NREL (National Renewable Energy Laboratory)
- 한국전력거래소
마지막 업데이트: 2026-02-11