본문 바로가기

IT관련

오라클 머신러닝 - SQL*Plus 에서 수치 예측(Regression, 회귀분석) 실습 예제

Oracle DBMS 내부에 Machine Learning 관련 모듈들이 들어있습니다. 그리고 무료로 제공됩니다.

제공되는 머신러닝 알고리즘은 여길 참고하세요. ==>  >>오라클 DBMS 내에서 무료로 제공하는 머신러닝 알고리즘<<

 

오라클에서 제공되는 머신러닝 알고리즘중에 랜덤포레스트(Random Forest)를 이용해서 자전거 대여수를 예측하는 분석을 해보겠습니다.

( 원래는 회귀분석(Regression)에는 GLM 등의 알고리즘이 별도로 있는데, Random Forest 알고리즘이 Regression 과 Classification 에 다 쓰일 수 있는 점을 이용해서 해봤습니다. )

 

Random Forest 알고리즘에 대한 완벽한 이해가 있으면 더 좋겠지만, 그런 이해가 부족하더라도 Oracle DBMS 만 있으면 누구나 쉽게 분석을 해 볼 수 있습니다.

 

아래에 테스트에 사용할 "자전거 렌털(대여) 데이터"를 첨부합니다.

SQL*Developer 에서 아래 파일을 똑같은 이름(BIKE_RENT)의 테이블로 Import 합니다.

 

BIKE_RENT.csv
0.04MB

 

 

SQL*Developer 에서 파일을 Import 하는 방법은 여길 참조하세요.

              ==>  >>SQL*Developer 에서 테이블 Import/Export 하는 방법<<

 

단, 주의할 부분은 Import 할때, dteday 가 날짜데이터라 DATE 타입으로 Import 되는데, 이걸 VARCHAR2 타입으로 바꿔서 Import 해야 합니다. Date 타입은 Oracle ML 알고리즘에서 실행시 에러가 납니다.

 

 

BIKE_RENT 테이블은 2011년 1월부터 2012년 6월까지의 자건거 렌털 건수(530건)와 각각의 날에 렌털에 영향을 미칠수 있는 환경변수로 구성되어 있습니다. 휴일여부, 온도, 습도, 바람세기 등등이 자전거 대여에 영향을 미칠 수 있는 요인들이 되겠죠...

맨 마지막 컬럼인 count 가 당일 자전거 렌털건수 입니다.

다양한 환경변수(휴일여부, 온도, 습도, 바람세기 등등)가 주어졌을때, 이 count 값을 예측하는게 우리의 목표입니다.

 

자, 그러면 이제 머신러닝을 해보겠습니다.

 

 

1) 세팅 테이블 준비

 

첫번째 단계는 세팅 테이블을 준비하는 것입니다. 어떤 알고리즘을 쓸 것인지, 알고리즘에 사용될 변수들은 어떻게 세팅할 것인지를 지정합니다.

 

-- 테이블 생성
create table SETTING_RF (
   setting_name varchar2(30),
   setting_value varchar2(4000)
);

-- 테이블에 데이터 입력
BEGIN
   INSERT INTO SETTING_RF (setting_name, setting_value) VALUES
   (dbms_data_mining.algo_name, dbms_data_mining.algo_random_forest);

   INSERT INTO SETTING_RF (setting_name, setting_value) VALUES
   (dbms_data_mining.prep_auto, dbms_data_mining.prep_auto_on);
END;
/

 

알고리즘별로 세팅해주는 변수값들이 다 다르고 복잡합니다. 이건 알고리즘에 대한 기본지식이 있어야 설정이 가능합니다. 잘 모르는 경우는 디폴트로 자동으로 세팅하는 방법이 있습니다. 그게 바로 prep_auto_on 입니다.

이게 있어서 Random Forest 알고리즘에 대한 지식없이도 누구나 쉽게 머신러닝이 가능합니다.^^

Random Forest 알고리즘에 대한 지식이 있고, 값을 변경하고자 하는 경우 Oracle Data Mining 매뉴얼에 다양한 설정 변수들이 있습니다. 매뉴얼을 참조해서 설정을 변경해주면 되겠습니다.

 

 

2) 모델 생성 (학습)

 

DBMS_DATA_MINING 패키지의 Create_Model() 함수를 호출하는 것으로 모델 생성(학습) 작업이 끝납니다.

 

begin
    DBMS_DATA_MINING.CREATE_MODEL(
        model_name          => 'RF_MODEL_BIKE_RENT',
        mining_function     => DBMS_DATA_MINING.CLASSIFICATION,
        data_table_name     => 'BIKE_RENT',
        case_id_column_name => 'INSTANT',
        target_column_name  => 'COUNT',
        settings_table_name => 'SETTING_RF'
    );
end;
/

 

model_name             : 적절한 이름으로 작명하면 됩니다.

mining_function         : 정확히는 regression 인데, Random Forest 알고리즘이 오라클에서는 공식적으로는 classification 만 가능해서 일단 여기서는 classification 으로 씁니다.

data_table_name        : 데이터는 위에서 Import 한 테이블 BIKE_RENT 입니다.

case_id_column_name : 머신러닝을 할때 테스트 데이터 한건한건을 구분하는 컬럼을 case_id 라고 합니다.

                               오라클 테이블 개념에서는 PK 에 해당하는 컬럼입니다.

target_column_name   : 머신러닝의 목표(대상)에 해당하는 컬럼입니다. 여기서는 렌털건수인 COUNT 컬럼.

settings_table_name   : 앞에서 생성한 세팅 테이블

 

 

3) 테스트 (예측)

 

위에서 Create_Model() 함수를 호출함으로써 내부적으로 학습(Learning)이 끝났습니다.

이제, 테스트(예측)만 하면 됩니다.

 

보통 머신러닝을 할때 데이터를 Train 데이터와 Test 데이터로 나눠서 하는데, 저는 이해를 돕기 위해 BIKE_RENT 데이터 530건 전체를 가지고 학습을 했습니다.

테스트도 이 530건 똑같은 데이터를 가지고 해보려고 합니다.

 

이런식으로 학습한 데이터를 가지고 예측을 하게되면, 얘가(기계가) 얼마나 똘똘하게 맞추는지 측정하기가 쉽다는 장점이 생깁니다. 우리는 정확한 답을 이미 알고 있기 때문이죠~~ ㅋㅋ

 

오라클에서 머신러닝 학습한 모델로 예측(Predict) 하는 것은 매우 쉽습니다.

아래처럼 predition() 함수를 호출해주면 끝~

 

create table BIKE_RENT_RESULT_RF
as
select INSTANT, DTEDAY, COUNT, 
       prediction(RF_MODEL_BIKE_RENT using *) predicted_value,
       prediction_probability(RF_MODEL_BIKE_RENT using *) probility
from BIKE_RENT;

 

위 prediction(RF_MODEL_BIKE_RENT using *) 의 의미는 RF_MODEL_BIKE_RENT 모델을 사용해서 predict 하라는 의미입니다. 이때 using * 는 모델에서 학습할때 사용한 속성(컬럼)들을 모두 사용하라는 의미 되겠습니다.

 

여기서는 from 절에서 학습한 테이블과 같은 테이블인 BIKE_RENT 를 다시 썼는데, 새로운 데이터를 테스트(학습)해 보려면 새로운 테이블로 바꿔주기만 하면 됩니다. 단, 결과값인 COUNT를 제외한 학습할때 사용한 속성컬럼들이 다 있어야 겠죠~ (INSTANT, SEASON, ... WINDSPEED)

 

위 SQL에서는 조회(예측)한 결과를 새로운 결과 테이블 BIKE_RENT_RESULT_RF 에 넣었습니다.

 

 

COUNT 값이 원래 값이고, PEDICTED_VALUE 가 머신이 예측한 값인데, 완전히 똑같지는 않습니다. 하지만, 얼추 비슷하게 유추한 것같은 느낌은 들죠~~  얘가 제대로 예측한 것인지 확인하려면 차트(그래프)로 보면 좀더 눈에 확 들어옵니다.

 

아래는 Oracle OADesktop 으로 그려본 것입니다.

 

 

오라클 OADesktop 으로 차트 그리는 방법은 아래를 참조 바랍니다.

 

   참조 ==>    >> OADesktop으로 DB접속, 테이블 가져와서 차트 그리기 실습 <<