본문 바로가기

카테고리 없음

[논문 리뷰] Internet of things dataset for home renewable energy management

💡 Abstract 스마트 시티,홈의 에너지 소비 및 예측을 시뮬레이션하거나 사용할 수 있는 데이터셋이 부족 스마트 홈 에너지 관리 시뮬레이션을 위해 신중하게 생성된 데이터셋을 제공 합성 데이터 생성과 그 이점

 

Dataset

이 dataset이 가치있는 이유

  1. 많은 집의 다양한 IOT장치에서 가정 에너지 데이터를 가져오기 어려움
  2. 다른 연구에서도 재사용 가능 - 스마트 홈 에너지 소비 분석, 주거용 전기 소비에 대한 예측 분석.. etc
  3. 스마트 시티에서의 에너지 관리 및 시뮬레이션에 사용 가능

peer to peer 에너지 전송의 보안문제 , 데이터 접근성 격차 → 합성 데이터로 해결

Data Description

20, 50, 100, 200 가구를 대상으로 한 365일 동안의 5개의 데이터셋

일반적인 가정용 전자기기의 에너지 사용을 추적

20개 주택 데이터 세트에 대해서 유효성 검증

평균,범위,중앙값, 분산 및 표준 편차 계산

Methods

Initialization of Parameters

 

매개변수 작동시간  (가정)
냉장고 24
에어컨 5
조명 6
주방 가전제품 3

Appliance Energy Consumption Modeling

에너지 소비 무작위로 생성

평균값과 표준 편차는 사우디 아라비아 북부 지역에서 가져온 실제 날씨 데이터 세트를 기반으로 추정

⇒ 사용 패턴의 변화가 실제 지역의 날씨에 현실적 영향을 받도록 보장

Energy Balance Calculation

에너지 균형 계산

각 가구의 일일 에너지 사용량은 가정에서 소비하는 에너지에서 태양광 및 풍력 에너지원에서 생성된 에너지를 빼서 계산

Simulation of Solar and Wind Energy Generation

 

태양광 발전  평균 1000, 표준 편차 100의 정규 분포
풍력 발전 평균 900, 표준 편차 100으로 정규화

Limitations

  • 제한된 가구 수
  • 가전제품별 세부 에너지 소비 데이터
  • 태양광 장치 수에 대한 정보 부재
  • ⇒ Data set 업데이트를 통해 개선 가능

Synthetic Dataset 만들기

사전 준비 → 합성데이터 생성 → 유용성`안전성 검증 → 활용

ex) 안전모 착용 이미지 Dataset https://dataprivacy.go.kr/ 공지사항 ⇒ 합성데이터 제공 신청 양식 및 안내

GAN이란?

Generative Adversarial Network

비지도학습에 사용되는 머신러닝 프레임워크의 한 종류

분류모델 ↔ 생성모델 적대적 경쟁을 통해 합성 데이터 생성

 

GAN으로 BEMS 합성데이터셋 만들기
1. 데이터 준비

import pandas as pd

# 데이터 로드
data = pd.read_csv('bems_data.csv')

# 필요한 전처리 수행
data = data.fillna(data.mean())  # 결측값 처리

2. GAN 모델 정의
GAN은 생성기와 판별기라는 두 개의 모델로 구성됩니다.
생성기는 합성 데이터를 생성하고, 판별기는 실제 데이터와 합성 데이터를 구별합니다.

  • import tensorflow as tf
    from tensorflow.keras import layers
    
    # 생성기 정의
    def build_generator():
        model = tf.keras.Sequential()
        model.add(layers.Dense(128, activation='relu', input_dim=100))
        model.add(layers.Dense(256, activation='relu'))
        model.add(layers.Dense(data.shape[1], activation='sigmoid'))
        return model
    
    # 판별기 정의
    def build_discriminator():
        model = tf.keras.Sequential()
        model.add(layers.Dense(256, activation='relu', input_dim=data.shape[1]))
        model.add(layers.Dense(128, activation='relu'))
        model.add(layers.Dense(1, activation='sigmoid'))
        return model
    
    generator = build_generator()
    discriminator = build_discriminator()
    
    
    3. GAN 구성 및 컴파일
    생성기와 판별기를 합쳐서 GAN을 구성하고 컴파일합니다. 여기서는 Adam 옵티마이저를 사용합니다.
    # 판별기 컴파일
    discriminator.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
    
    # GAN 모델 정의
    discriminator.trainable = False  # GAN 훈련 시 판별기는 고정
    gan_input = tf.keras.Input(shape=(100,))
    generated_data = generator(gan_input)
    gan_output = discriminator(generated_data)
    gan = tf.keras.Model(gan_input, gan_output)
    
    # GAN 컴파일
    gan.compile(optimizer='adam', loss='binary_crossentropy')
    
    ​


    4. 모델 훈련
    GAN 모델을 훈련합니다. 생성기는 판별기를 속이기 위해 점점 더 진짜 같은 데이터를 생성하고, 판별기는 이를 구별하는 능력을 계속해서 향상시킵니다.
    import numpy as np
    
    def train_gan(gan, generator, discriminator, data, epochs=10000, batch_size=64):
        for epoch in range(epochs):
            # 실제 데이터 가져오기
            real_data = data.sample(batch_size)
            real_data = np.array(real_data)
    
            # 가짜 데이터 생성
            noise = np.random.normal(0, 1, (batch_size, 100))
            fake_data = generator.predict(noise)
    
            # 판별기 훈련
            d_loss_real = discriminator.train_on_batch(real_data, np.ones((batch_size, 1)))
            d_loss_fake = discriminator.train_on_batch(fake_data, np.zeros((batch_size, 1)))
            d_loss = 0.5 * np.add(d_loss_real, d_loss_fake)
    
            # 생성기 훈련
            noise = np.random.normal(0, 1, (batch_size, 100))
            g_loss = gan.train_on_batch(noise, np.ones((batch_size, 1)))
    
            # 에포크마다 손실 출력
            if epoch % 1000 == 0:
                print(f"{epoch} [D loss: {d_loss[0]}, acc.: {100*d_loss[1]}%] [G loss: {g_loss}]")
    
    # 모델 훈련
    train_gan(gan, generator, discriminator, data)
    
    ​



    5. 합성 데이터 생성
    훈련된 생성기를 사용하여 새로운 BEMS 합성 데이터를 생성합니다
    # 새로운 합성 데이터 생성
    noise = np.random.normal(0, 1, (10, 100))
    synthetic_data = generator.predict(noise)
    
    # 결과 확인
    print(synthetic_data)
    
    ​
  • 관련링크https://data.mendeley.com/datasets/5h86vnxw68/1 ← data set
  • https://www.nature.com/articles/s41597-021-00989-6
  • https://www.sciencedirect.com/science/article/pii/S2352340924001379 ← 논문
  • bems using blockchain ?https://www-dbpia-co-kr-ssl.openlink.inha.ac.kr/journal/articleDetail?nodeId=NODE10609921https://ieeexplore.ieee.org/document/9673233
  • https://www.sciencedirect.com/science/article/pii/S2352484723003827
  • https://etasr.com/index.php/ETASR/article/view/7188