-- 1. 학습 테이블에 파생변수 컬럼을 추가합니다.
비만인 여자는 의료비가 더 들까?
이 데이터를 파생변수로 생성하겠습니다.
비만인 여자는 1, 그렇지 않은 사람은 0으로 데이터 만듭니다.
ALTER TABLE INSURANCE
ADD FEMALE_BMI30 NUMBER(10);
UPDATE INSURANCE I
SET FEMALE_BMI30 = ( SELECT CASE WHEN BMI >= 30 AND SEX='female'
THEN 1 ELSE 0 END
FROM INSURANCE S
WHERE S.ROWID = I.ROWID) ;
COMMIT;
-- 2. 훈련 데이터와 테스트 데이터를 9대 1로 분리합니다.
DROP TABLE INSURANCE_TRAINING;
CREATE TABLE INSURANCE_TRAINING
AS
SELECT * FROM INSURANCE
WHERE ID < 1114;
DROP TABLE INSURANCE_TEST;
CREATE TABLE INSURANCE_TEST
AS
SELECT * FROM INSURANCE
WHERE ID >= 1114;
-- 3. 머신러닝 모델을 생성합니다.
BEGIN
DBMS_DATA_MINING.CREATE_MODEL(
MODEL_NAME => 'MD_REG_MODEL4',
MINING_FUNCTION => DBMS_DATA_MINING.REGRESSION,
DATA_TABLE_NAME => 'INSURANCE_TRAINING',
CASE_ID_COLUMN_NAME => 'ID',
TARGET_COLUMN_NAME => 'EXPENSES',
SETTINGS_TABLE_NAME => 'SETTINGS_REG2');
END;
/
-- 4. 생성된 모델을 확인합니다.
SELECT MODEL_NAME, ALGORITHM, MINING_FUNCTION
FROM ALL_MINING_MODELS
WHERE MODEL_NAME = 'MD_REG_MODEL4';
-- 5. 회귀 모수를 확인합니다.
SELECT ATTRIBUTE_NAME, ATTRIBUTE_VALUE, ROUND(COEFFICIENT)
FROM TABLE (DBMS_DATA_MINING.GET_MODEL_DETAILS_GLM ('MD_REG_MODEL4'));
-4452
AGE 265
BMI 46
BMI30 19493
CHILDREN 498
FEMALE_BMI30 328 <-- 비만인 여자는 연간 의료비가 328달러 더 든다고 예측됩니다.
REGION northeast 735
REGION northwest 565
REGION southwest -556
SEX female 413
SMOKER yes 13334
-- 6. R 스퀘어 값 확인 (데이터에 대한 모델의 설명력)
SELECT GLOBAL_DETAIL_NAME, ROUND(GLOBAL_DETAIL_VALUE,3)
FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_GLOBAL(MODEL_NAME =>'MD_REG_MODEL4'))
WHERE GLOBAL_DETAIL_NAME IN ('R_SQ','ADJUSTED_R_SQUARE');
R_SQ 0.862 <-- 아까(비만이면서 흡연하는 사람의 파생변수(BMI30)까지 추가했을 때)와 변화가 없습니다. ADJUSTED_R_SQUARE 0.861 <-- 아까(비만이면서 흡연하는 사람의 파생변수(BMI30)까지 추가했을 때)와 변화가 없습니다.