1. 서론
오늘날은 빅데이터의 시대다. 연구자가 데이터가 없어서 연구 못한다는 변명은 더 이상 통하지 않는 시대다.
이와 같이 빅데이터가 증가한다는 것이 우리 일상 생활의 편리함이 증가한다는 것을 반드시 의미하지는 않는다.
최근 출간된 Glass Cage의 저자인 Nicolas Carr는 빅데이터로 인한 자동화의 시스템이 우리의 인간성을 어떻게 저해하는지에 대한 통찰력있는 비판을 제시하고 있다. 로봇에 의한 무인공정화, 웨어러블 장비, 드론 등 현재 진행되고 일들뿐만 아니라, 빅데이터와 결합된 머신러닝은 이제 회계사, 통계학자, 경제학자, 사회학자의 역할까지도 담당하게 될 날이 머지 않은 것으로 보인다.
지금까지 인류의 역사가 그랬듯이, 기술의 진보, 특히 비연속적인 기술도약의 단계에 있는 진보에 대한 우려가 항상 있었지만, 이러한 우려가 기술의 개발과 채택을 막지는 못했다. 산업혁명 때에도 그랬으며, 컴퓨터나 스마트폰의 등장도 마찬가지다.
프로메테우스가 가지고 온 불을 다시 되돌릴 수 없으니, 이 불을 어떻게 인류를 위해 활용할지를 생각해 보는 게 현명할 것이다.
2. 정의
1) 빅데이터
미국의 정보관련 연구소인 Gartner가 제시한 3V = Volume + Variety + Velocity 측면에서 빅데이터 정의하는 것이 일반적이다.
Volume: 일반 기업에서도 테라바이트, 페타바이트 급 규모의 데이터를 다루는 경우가 증가
Variety: 빅데이터가 되는 데이터는 정형(structured), 반정형, 비정형의 모든 형태가 포함됨
Velocity: 실시간성 정보의 증가와 함께 데이터를 수집하고, 가공, 분석하는 등의 일련의 처리과정이 실시간 또는 일정주기에 맞추어 처리 가능
2) 머신러닝
머신러닝은 기계가 학습하도록 한다는 점에서 AI (Artificial Intelligence), Neural Network, Optimization, Computer Algorithm 등 여러 분야와 인접하고 있으며, 비단 최근 뿐만 아니라 컴퓨터가 나오기 시작한 오래 전부터 관심의 대상이었다. 따라서, 머신러닝은 한 문장으로 정의하기에 힘들다.
하지만, 가장 인용이 많이 되는 정의 중에 몇 개를 소개하면 다음과 같다.
Arthur Samuel (1959): Machine learning is the field of study that gives computers the ability to learn without being explicitly programmed.
Tom Mitchell (1998): A computer program is said to learn from experience "E" with respect to some task "T" and some performance measured "P", if its performance on "T", as measured by "P" improves with experience "E".
카네기멜런대의 Tom Mitchell에 의하면 머신러닝의 정의는 우선 머신러닝이 왜 필요한지에 대한 질문부터 살펴보면 보다 더 잘 이해할 수 있다.
"How can we build computer systems that automatically improve with experience, and what are the fundamental laws that govern all learning process?"
(참고: Tom Mitchell, The Disciple of Machine Learning, http://www.cs.cmu.edu/~tom/pubs/MachineLearning.pdf)
즉, 문자 그대로 머신러닝은 기계가 자율적으로 임무를 수행하고 임무성과를 평가한 후, 반복적으로 보다 더 나은 방향으로 임무를 수행하도록 발전시킨다는 것을 목적으로 하고 있다. 여기서 학습(learning) 이라는 과정이 매우 핵심적인 기능을 가지며, 임무 - 피드백 - 학습 - 임무 재수행의 반복적인 과정을 성공적으로 수행하기 위하여 다양한 학습도구를 활용한다.
여기서 당연히 빠질 수 없는 학습도구가 베이지언 학습(Bayesian learning process)이다. 베이지언은 사후적 확률과 사전적 확률을 연결해주는데, 위의 Tom Mitchell의 정의를 빌리자면 성과 T를 P로 측정하여 베이지언 추론에 의해 보다 나은 알고리즘으로 학습케 해주는데 유용하게 쓰일 수 있다.
3. 분석도구
1) 통계분석: 선형모형, 가설검정, 오차 및 잡음
2) 시계열분석: 고밀도 자료의 시계열 분석, 웨이브렛, 커널 분석
3) 신경망 모형
4. 최적학습
1) 학습 기본개념
2) 적응적 학습: 베이지언 관점, 몬테카를로 시뮬레이션
3) 평가 및 선택: 성과 평가
4) Knowledge Gradient, Bandit Problem
5) Optimal bidding: 베이지언 bidding
5. 경제학에서의 활용
Susan Athey, How big data changes business management (http://www.gsb.stanford.edu/insights/susan-athey-how-big-data-changes-business-management)
P. Hummel, R.P.McAfee, Machine learning in an auction environment (http://vita.mcafee.cc/PDF/VOL2.pdf)
R. Ghani, H. Simmons, Predicting the end-price of online auctions (http://rayidghani.com/publications/ws_ecml2004.pdf)
6. 응용 예
1) 전력시장
전력시장: L.A. Wehinger, Agent-based modeling in electricity markets: introducing a new predictive agent learning approach, Master thesis, Carnegie Mellon (http://www.eeh.ee.ethz.ch/uploads/tx_ethpublications/MA_Wehinger.pdf)
Agent-based model과 전력요금제: 이유수, 박호정, 선택적 전력요금제의 소비자 후생변화 분석Download
2) 문화경제 분야
야구 승리 예측: Jia et al., Predicting the major league baseball season (http://cs229.stanford.edu/proj2013/JiaWongZeng-PredictingTheMajorLeagueBaseballSeason.pdf)
영화 흥행 예측: A. Kaur, Predicting movie success: review of existing literature (http://www.ijarcsse.com/docs/papers/Volume_3/6_June2013/V3I6-0631.pdf)
영화 흥행 예측: D.Im and M.T. Nguyen, Predicting box-offices success of movies in the U.S. Market (http://cs229.stanford.edu/proj2011/ImNguyen-PredictingBoxOfficeSuccess.pdf)
3) 배출권 및 기타 상품파생상품
Dai et al., Allocating tradable emission permits based on the proportional allocation comcept to achieve a low-carbon economy (http://www.hindawi.com/journals/mpe/2014/462705/)
Z. Bing et al., Policy design and performance of emissions trading markets: an adaptive agent-based analysis (http://pubs.acs.org/doi/full/10.1021/es9035368)
웹 스크래핑
진정한 머신러닝이 되려면 필요한 데이터를 알아서 가져오는 웹 스크래핑(web scraping)의 기능까지 있어야겠다는 생각을 하게 될 것이다. 예를 들어, 전력수요 전망을 매일같이 자동으로 수행하는 머신러닝을 만들려고 할 경우, 전력가격 데이터가 자동으로 업데이트 되면 일하기에 수월해질 것이다.
아래 프로그램은 우리나라 전력거래소의 웹사이트에서 자동으로 정해진 시간에 SMP 데이터를 스크래핑하는 MATLAB 프로그램이다. 예제 삼아 만들어 본 것이라 완전하지는 않지만, 어떻게 기능하는지 기본 기능을 파악하는데는 문제가 없을 것이다 (auto_call을 약간만 수정하면 매일같이 스크래핑을 자동으로 수행하게 만들 수 있다)
<프로그램 설명>
scraping_KPX.m: 데이터 스크래핑하는 프로그램
auto_call.m: 정해진 시각에 자동으로 스크래핑하도록 한 타이머 프로그램
그리고 위의 scraping_KPX.m을 돌리기 위해서는 urlfilter가 필요하다 (링크: http://www.mathworks.com/matlabcentral/fileexchange/44751-url-filter)
이를 run하면 예를 들면, 아래처럼 KPX의 사이트에 들어가서 스크래핑한 데이터가 매트랩 데이터 형식으로 저장됨
% Program name: scraping_KPX.m
% Program for scraping smp data at KPX webiste
% Programmed by Hojeong Park
the_url = 'http://www.kpx.co.kr/KOREAN/htdocs/main/sub/bidSmpList.jsp'; % URL address
N=24;
hours = cellstr(num2str((1:N)', '%dh')); hours=strtrim(hours); % 1h, 2h, ..., 24h의 variable 이름 생성
for i=1:24
find = char(hours(i)); % need to covert to character array for valid input to 'urlfilter' function
smp_inbox(i,:) = urlfilter(the_url, find,7); % smp_inbox는 auto_call에서 define됨
end
% Program name: auto_call.m
% Program for automatic data scraping
% Linked to scraping_KPX02.m which scrapes the smp data at pre-specified time
% Programmed by Hojeong Park
clear all
starttime='06-Feb-2015 17:27:00'
t1 = timer('TimerFcn','scraping_KPX02');
startat(t1, starttime);
SMP_data=zeros();
ABATAR 모델 (developed by Hojeong Park)
아래 모형은 우리나라의 전력시장을 emulation하는 것을 목적으로 구축한 agent-based model이다. 전기가격이 오르고 감소하는 것에 소비자가 반응할 수 있도록 전기요금제도가 개편되는 것을 염두에 두고, 이른 바 소비자 선택요금제 하에서 소비자의 전력소비 지출과 소비량이 어떻게 바뀌는지를 분석하는 것을 목적으로 하고 있다. 전기요금제를 분석한다는 의미에서, ABATAR (Agent-BAsed TARiffs) 모델이라고 칭하였는데, 영화 AVATAR에서처럼 전력시장의 가상환경이라는 의미도 함축하고 있다.
ABATAR 모형은 소비부문의 서브모듈인 ABATAR_D과 발전부문의 서브모듈인 ABATAR_S으로 구분하며, 이 둘을 연결하는 전력시장 모듈 ABATAR_M존재한다. 선택요금제 이외의 ABATAR 모형 환경은 실제 우리나라 전력시장 운용환경에 최대한 근접하여 구축하였다. 전력판매사 (PD: Power distributor)는 과거의 전력소비 시계열 데이터를 활용하여 익일 전력소비를 추정하고, 발전사 (GENCO: Generation company)로부터 발전입찰을 받는다. 각 발전사는 발전원에 따라 이질적인 비용을 갖도록 설정되었으며, 이들이 최소비용원칙에 의해 입찰한 물량을 바탕으로 PD는 SMP 규칙에 의해 시간대별 전력요금을 결정하여 소비자에게 고지한다. 그러면, 소비자는 익일의 전력요금 정보를 바탕으로 자신의 여건에 맞춰 전력소비를 결정한다. ABATAR 모형은 이상의 과정이 매일같이 반복되도록 설정되었으며, 소비자가 지불하는 전력요금은 한 달 기준으로 합산되어 부과된다.
ABATAR 모형에서의 행위자는 생산부문이나 소비부문 모두 이질적 행위자 (heterogeneous agents)로 정의될 수 있다. 앞서 말한 바와 같이, 발전사는 상이한 발전한계비용에 의해 이질적이다. 소비자의 경우, 개별 소비자가 익일 전력요금 정보에 어떻게 반응하는지를 다르게 설정함으로써 이질적 행위자를 도입하였다. 즉, 소비자가 주어진 가격정보를 바탕으로 전력소비를 최적화하는 정도가 개별 행위자 여건에 따라 다른 것으로 가정하였다. 이는 최적화 과정을 통해 전력소비를 시간대별로 재배분(load shifting)하는 과정이 수반된다.
행위자기반모형에서 핵심적인 기능은 경제주체의 학습행위다. ABATAR에서 행위자의 학습행위는 소비자가 자신의 전력요금 지출정보를 가지고 자신에게 적합한 요금제를 선택하는 것으로 표현한다. 소비자가 선택할 수 있는 요금제의 종류는 아래 그림과 같이 세 종류로 단순화한다. 가장 단순한 형태로서 고정요금제 (FLAT)는 전력피크 여부에 상관없이 고정요금이 적용되는 경우다. 두 번째로 단순한 형태는 실시간 전력요금제로 나아가기 전 단계로서의 TOU로서, 4시간이나 6시간 등 일정 시간대 동안에는 고정가격을 적용받지만 피크 정도에 따라 가격수준이 증감하는 형태를 취한다. 실시간 전력요금에 가장 가까운 RTP 는 매 시간대별로 전력부하에 비례하여 가격이 증가하는 방식이다.
모듈 ABATAR_D에서 소비자는 전력소비 형태에 따라 Type 1과 Type 2로 구분된다. Type 1 소비자의 전력소비는 오전과 오후의 피크부하 시간대에 집중적으로 이루어지는 반면, Type 2 소비자의 전력소비는 비피크부하 시간대에 집중되는 것으로 가정하였다. 두 유형의 소비자 모두 전력비용 지출을 최소화하고자 하며, 이는 목적함수의 형태로 표현된다. 따라서 목적함수는 전력비용이며, 제약식은 계통 상 전체 전력수요가 확률과정으로 주어진 가운데서의 전력수요가 된다.
아래 그림은 ABATAR의 기본모형 구조를 보여주고 있다. 그 아래의 동영상은 Type 1 소비자와 Type 2 소비자가 지출하게 되는 일별 전력비용을 세 가지 전력요금제, 즉 고정요금제, RTP, TOU에서 시뮬레이션한 결과다.
Type 1 소비자의 일별 전기요금 지출 시뮬레이션
Type 2 소비자의 일별 전기요금 지출 시뮬레이션
아래 동영상은 GUI 환경에서 시뮬레이션한 결과를 보여준다.
Type 1 및 Type 2 소비자의 월 전력비용 시뮬레이션으로서, 세 가지 전력요금제가 고려 대상이다.
(Fixed: 250원/kWh의 고정요금제 가정, RTP: Real Time Pricing, TOU: Time of Use)
하첨자 _opt는 소비자가 one-day-ahead 전력요금을 고지받을 때, 그 다음 날 전력소비 시간대를 최적화하는 경우를 의미한다. 괄호안의 숫자는 최적화 행위가 없을 때와 비교하여 전력요금의 변화분을 나타내는데, 예를 들어, -8.0%는 전력소비 시간대를 재배분하는 최적화를 통해 한달치 전기요금을 8% 절약할 수 있다는 것을 의미한다. 각 Type 소비자의 크기인 N1과 N2를 달리하였을 때에 전력시장에서 시간대별 전력요금이 상이하게 영향을 받기 때문에, 절감효과도 달리 나타나는 것을 알 수 있다.
; 직접 GUI를 실행하길 원하면 링크 http://blog.naver.com/optionreal/220270618862 에서 exe를 실행하면 된다. 이 프로그램을 돌리기 위해서는 Matlab 자체는 없어도 컴파일러인 MCR이 컴퓨터에 설치되어 있어야 한다 (http://www.mathworks.com/products/compiler/mcr/).
아니면 다음 링크에서 직접 zip 파일로 가지고 와서 실행하면 된다.
Matlab 프로그램이 없어도 GUI 프로그램을 돌릴 수 있는 stand-alone application을 만들고자 한다면?
>> deploytool
(1) 파일이름을 저장한 후 (path가 잘 정의되지 않으면 에러가 자주 난다. 이 경우 C:\Users\Username 아래 저장하는 것도 한 방법이다)
(2) Build에서 Add Main File 클릭 => exe 파일만들고자 하는 m 파일 찾아서 클릭
(3) 만일 이 main file과 link가 된 shared file이 있으면 이들은 아래 패널에서 찾아서 클릭~
(4) Package로 가서, *.exe가 생성된지 확인
(5) Build 버튼을 누름
(6) 파일 크기에 따라 한참 시간이 걸리는데, 완료가 되면 exe가 생성된 것을 확인할 수 있음
* 유의사항: Matlab 프로그램 자체는 없어도, 매트랩 컴파일러인 MCR은 PC에 설치되어 있어야 standalone-application이 돌아간다.
(다음 사이트에서 다운로드하면 된다: http://www.mathworks.com/products/compiler/mcr/)
* 위의 deploytool에서부터 package로 exe를 돌릴 수 있는데, 이 경우에는 Package로 가서 Add MCR를 선택해야 한다. MCR 자체 용량이 300MB 이상 된다는 점을 염두에 두어야 한다.