콘텐츠로 이동
Data Prep
상세

에너지/유틸리티 데이터 분석 가이드

개요

에너지 산업의 데이터 분석은 수요 예측, 그리드 최적화, 재생에너지 통합, 에너지 효율화를 목표로 한다. 스마트 미터, 센서, 날씨 데이터를 활용하여 지속 가능한 에너지 시스템을 구현한다.

핵심 분석 영역

영역 목표 핵심 지표
수요 예측 전력 수요 예측 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 수요 반응

참고 자료


마지막 업데이트: 2026-02-11