김예빈Yebeen Kim

연구 · 빅데이터 분석 경진대회 · 한양대학교 스마트팩토리랩

빅데이터 분석 경진대회 — 3시간짜리 현장 분석을 두 소프트웨어로 두 번씩 풀었다

성인 연간 수익 분류와 복합화력발전소 전력 생산량 예측 두 문항을 보고서가 정한 6단계 절차로 풀고, JMP와 EC Miner에서 같은 모형을 각각 돌려 결과를 대조한 기록

기간
2019.11.13 – 2019.11.20
역할
개인 참가 — 두 문항의 전처리·탐색적 분석·모형화·보고서 작성 전부
발표·산출
빅데이터 분석 경진대회 — 한양대학교 스마트팩토리랩 소속으로 참가, 최종 발표 2019.11.20
날짜
2019.11
목차 15개 절
목차
  1. 세 시간짜리 현장 대회였고, 모형 목록은 문제가 지정했다
  2. 문항 1 전처리 — 결측은 물음표 문자열로 들어와 있었다
  3. 문항 1 — 45,224행의 분포: 극소 수준과 0에 몰린 두 변수
  4. 문항 1 탐색 — 두 변수만 놓고 보면 틀린다
  5. 문항 1 — 연속형 네 변수는 서로 무관했고, 주성분은 55.6%만 설명했다
  6. 문항 1 — 이상값 311건 중 229건이 하나의 값이었다
  7. 문항 1 모형 (1) — 판별분석 22.7%에서 의사결정나무 15.2%로
  8. 문항 1 모형 (2) — 좌·우 서브트리를 끝까지 읽으면 임계값이 서로 다르다
  9. 문항 1 모형 (3) — 로지스틱: AUC 0.905, 그리고 뒤집힌 변수 순위
  10. 문항 1 모형 (4) — EC Miner 네 모형: 개선은 소수 클래스에서 왔다
  11. 문항 1 — 틀린 예측만 따로 모아 다시 분석했다
  12. 문항 2 — 9,568인가 9,567인가: 데이터와 기술통계
  13. 문항 2 — 네 변수와 PE의 관계, 주성분 1개, 그리고 MLR
  14. 문항 2 — 차원 축소 두 방법은 왜 졌는가
  15. 문항 2 — EC Miner 네 모형, 최종 비교, 그리고 대상
요약
  • 대회 본선은 2019년 11월 13일 오후 6시부터 9시까지 세 시간이었고, 분석 파일과 보고서를 11월 15일 12시까지 메일로 제출하는 방식이었다(한 시간 늦을 때마다 5점 감점). 두 문항 모두 비즈니스 이해 → 데이터 탐색 → 모형화·적용의 6단계 절차로 풀었다.
  • 모형 목록은 내가 고른 것이 아니라 문제가 지정했다. 문항 1은 판별분석·의사결정나무·로지스틱·SVM(EC Miner만), 문항 2는 JMP에서 MLR·PCA 활용·PLS, EC Miner에서 MLR·PCR·PLS·SVR를 넣으라는 빈 결과표가 문제와 함께 주어졌다. 그래서 이 보고서의 판단이 걸린 지점은 모형 선택이 아니라 전처리·해석·두 도구의 대조였다.
  • 문항 1의 결측은 빈칸이 아니라 물음표 문자열로 들어와 있었다. Workclass 2,799행, Occupation 2,809행, Native-country 855행이 결측이었고 세 조건의 합집합이 3,618행이어서, 48,842행 중 이를 제외한 45,224행으로 분석했다. 태생 국가 41개 수준은 지역 7개 수준으로 묶었다.
  • 분류에서는 EC Miner SVM의 검증 오분류율 13.99%가 가장 낮았다. 그런데 전체 오분류율 개선(로지스틱 20.92% → SVM 13.99%)의 실체는 소수 클래스였다 — 실제 5만 불 이상을 맞힌 비율이 로지스틱 30.23%에서 SVM 63.12%로 올랐다.
  • 회귀에서는 SVR이 검증 R² 0.93414 · RMSE 4.39259 · MAE 3.32241로 가장 좋았고, 주성분 기반 PCR이 0.83673으로 가장 나빴다. 두 문항 모두에서 차원 축소 모형이 원 변수 모형보다 나빴다 — 문항 1 판별분석도 주성분 23.1846% 대 원 변수 22.7379%였다.
주요 수치
3시간본선 분석 시간2019.11.13 18:00~21:00 · 보고서 제출 11.15 12:00 · 최종 발표 11.20
45,224행문항 1 분석 데이터원본 48,842행 중 결측 3,618행 제외 · 예측변수 12개
9,567행문항 2 분석 데이터JMP 기준(문제 설명과 EC Miner 합계는 9,568) · 변수 5개
오분류율 13.99%분류 최고 성능SVM(EC Miner, Test 1/3) — CART 14.00% · Logistic 20.92% · LDA 28.58%
R² 0.93414회귀 최고 성능SVR(EC Miner, Test 20%) RMSE 4.39259 · MAE 3.32241 — SVR > MLR > PLS > PCR
1위 수상수상2019.11 · 대회 규정의 명칭은 '최우수상 1명', 이력서·포트폴리오 기재는 '대상(1위)'

세 시간짜리 현장 대회였고, 모형 목록은 문제가 지정했다

작업용 덱 첫 장에 대회 일정이 그대로 남아 있다. 분석 시간은 세 시간, 보고서 제출은 이틀 뒤, 늦으면 시간당 5점 감점이었다.

한양대학교 스마트팩토리랩 소속으로 참가한 빅데이터 분석 경진대회의 보고서다. 작업용 덱 1번 슬라이드에 운영 규정이 적혀 있다.

항목내용
경진대회2019년 11월 13일(수) 오후 6:00 ~ 9:00
최종 제출2019년 11월 15일(금) 오전 12:00 — 한 시간 늦을 때마다 5점 감점
제출 방법분석 파일 및 보고서 메일 송부
최종 발표2019년 11월 20일(수)
시상최우수상 1명 · 우수상 2명 · 장려상 3명 · 참가상(수상자 제외 참가자 전원), 총 상금 300만원

즉 두 문항의 데이터를 처음 열어 모형까지 돌리는 데 주어진 시간이 세 시간이었고, 이후 이틀은 보고서를 쓰는 시간이었다. 제출 보고서는 66장, 그 뒤에 남아 있는 작업용 덱은 82장이다. 작업용 덱에는 보고서에서 잘라 낸 중간 화면이 그대로 남아 있다.

두 문항 모두 보고서 목차에 적힌 아래 6단계로 동일하게 풀었다. 단계 이름은 CRISP-DM의 앞부분과 겹치지만, 보고서 어디에도 그 이름은 쓰여 있지 않다.

단계세부 절차
01 비즈니스 이해1. 분석목적 설립 · 2. 주요 변수 확인
02 데이터 탐색3. 데이터 전처리 및 정제 · 4. 탐색적 데이터 분석
03 모형화 및 적용5. 모형개발 및 모형의 검증 · 6. 결과의 해석 및 인사이트 추출
문항과제데이터문제 유형
01성인 연간 수익 분류미국 성인 대상 인구통계 정보. 48,842행 중 결측 3,618행 제외 → 45,224행이진 분류 (연간 수익 5만 불 이상/미만)
02보고서 제목은 '공정상태 분류'복합형 화력 발전소 최적 상황 시 전력 생산량 2006~2011, 9,568행, 5개 변수실제로는 회귀 (시간당 전력 생산량 PE 예측)

여기서 먼저 적어 둘 것이 있다. 어떤 모형을 쓸지는 내가 고른 것이 아니다. 문항 1의 분석모델 목록(판별 분석 · 의사결정 Tree · Logistic · SVM은 EC Miner에서만)과 문항 2의 결과표 — JMP는 MLR·PCA 활용·PLS, EC Miner는 랜덤 80% Model / 20% Test로 MLR·PCR·PLS·SVR — 는 R²와 RMSE 칸이 비어 있는 채로 문제와 함께 주어졌다. 채점 대상은 그 칸을 채우는 능력이 아니라 전처리와 해석이었다는 뜻이고, 그래서 이 글에서 길게 적는 것도 모형 성능표가 아니라 전처리 판단과 오분류 행 탐색이다.

문항 2의 제목이 '공정상태 분류'인 것은 원본 보고서 표기를 그대로 따른 것이다. 분석목적은 '전력 생산량 예측'이라고 같은 슬라이드에 적혀 있고 실제로 수행한 것도 회귀이므로, 이 글에서는 회귀로 다룬다.

문항 1 전처리 — 결측은 물음표 문자열로 들어와 있었다

48,842행에서 3,618행을 덜어 낸 근거는 필터 화면 한 장에 남아 있고, 그 3,618행이 정확히 어느 열에서 나왔는지는 제외 전후의 도수분포를 맞대 보면 떨어진다.

원본 데이터의 결측은 빈칸이 아니라 물음표 문자열이었다. 그래서 결측을 세기 전에 이 문자열을 결측으로 인식시키는 처리가 먼저 필요했다.

JMP 데이터 필터 화면을 열면 결측이 어느 열에 얼마나 있었는지가 보인다. 열별 요약과 필터 조건은 다음과 같았다.

비결측 N결측 수범주 수
Workclass2,799 (물음표 수준)9 (물음표 포함)
Occupation46,0332,80914 (필터 패널은 물음표를 한 수준으로 세어 15)
Native-country47,98785541
Native-country(수정)47,9878557
Education_num48,842016
Marital-status · Relationship · Race · Sex48,84207 · 6 · 5 · 2
Capital-gain · Capital-loss · Hours-per-week48,8420

필터 창은 Workclass의 물음표 2,799건과 Occupation의 물음표 2,809건을 OR로 묶은 조건을 보여 주고, 그 아래로 스크롤된 조건까지 합쳐 3,618개의 행이 일치했다고 적혀 있다. 행 창에는 모든 행 48,842 · 선택됨 3,618 · 제외 3,618 · 숨김 0으로 찍혀 있다. 세 열의 결측을 단순히 더하면 6,463이지만 겹치는 행이 많아 합집합은 3,618이었고, 이 3,618행을 제외한 45,224행이 이후 모든 분석의 모집단이다.

같은 화면에서 제외 전 Workclass의 9개 수준 개수도 읽힌다.

Workclass 수준제외 전 (48,842)제외 후 (45,224)
물음표2,799
Never-worked10
Private33,90633,309
Self-emp-not-inc3,8623,796
Local-gov3,1363,100
State-gov1,9811,946
Self-emp-inc1,6951,646
Federal-gov1,4321,406
Without-pay2121

세 가지가 읽힌다. 첫째, ??? 2,799 + Never-worked 10 = 2,809는 Occupation의 결측 수와 정확히 같다 — 직장형태가 없거나 일한 적이 없는 사람은 직업도 비어 있었다는 뜻이고, 그래서 결측 제외 후 Workclass는 9수준이 아니라 7수준이 되었다. 즉 Workclass 결측은 Occupation 결측에 통째로 포함되므로 두 열만으로는 2,809행밖에 빠지지 않는다.

둘째, 그러면 3,618의 나머지 809행이 어디서 왔는지가 표에서 확인된다. 제외 전후로 줄어든 Workclass 수준별 개수를 더하면 Private 597 + Self-emp-not-inc 66 + Self-emp-inc 49 + Local-gov 36 + State-gov 35 + Federal-gov 26 = 809다. 직장형태와 직업은 멀쩡한데 태생 국가만 비어 있던 행들이고, Native-country 결측 855건 중 이미 Occupation 결측이던 46건을 뺀 수와 맞는다. 결국 제외 조건은 Occupation 물음표 ∪ Native-country 물음표 = 2,809 + 855 − 46 = 3,618이었다.

셋째, Without-pay 21건은 한 건도 줄지 않았다. 무급 노동자는 직업과 태생 국가가 모두 기록되어 있었다.

연속형 변수의 평균도 제외 전후로 달라졌다. Capital-gain은 1079.0676262 → 1101.3816, Capital-loss는 87.502313583 → 88.5915, Hours-per-week는 40.422382376 → 40.937931로 셋 다 조금씩 올라갔다. 결측 3,618행은 무작위로 빠진 것이 아니라 수입과 근로시간이 상대적으로 낮은 쪽에 몰려 있었다는 뜻인데, 이 편향을 보정하지는 않았다. 세 시간 안에 두 문항을 끝내야 하는 조건에서 결측 대치는 시도하지 않고 제외로 갔다.

나머지 전처리는 세 가지였다. (1) 태생 국가 41개 수준을 Centeral America · East Asia · East Europe · North America · South America · South-East&Central Asia · West Europe 7개 지역으로 묶어(첫 수준의 철자는 원본 표기 그대로다) Native-country(수정)를 만들었다. (2) 목표변수를 5만 불 이하 0 / 이상 1의 명목형 이산값으로 바꾸었다. (3) Education_num(Education과 중복)과 fnlwgt(샘플링 가중치)를 분석에서 제외해 예측변수 12개를 남겼다.

JMP 데이터 필터 화면. Workclass의 물음표 수준 2,799건과 Occupation의 물음표 수준 2,809건이 OR 조건으로 선택되어 있고(스크롤 아래 조건까지 합쳐 '3618개의 일치하는 행'), 우측 행 창에 모든 행 48,842 / 선택됨 3,618 / 제외 3,618이 표시된다. 좌측
JMP 데이터 필터 화면. Workclass의 물음표 수준 2,799건과 Occupation의 물음표 수준 2,809건이 OR 조건으로 선택되어 있고(스크롤 아래 조건까지 합쳐 '3618개의 일치하는 행'), 우측 행 창에 모든 행 48,842 / 선택됨 3,618 / 제외 3,618이 표시된다. 좌측 요약표에서 Occupation 46,033·2,809·14, Native-country 47,987·855·41 같은 열별 비결측·결측·범주 수를 읽었다.

문항 1 — 45,224행의 분포: 극소 수준과 0에 몰린 두 변수

편중이 큰 상위 수준만 보고 넘어가면 표본이 수십 건인 수준들과, 90% 분위수까지 0인 변수를 놓친다.

제외 후 12개 변수의 분포 출력(N = 45,224)을 그대로 복원하면 다음과 같다.

변수수준 (개수 · 확률)
Workclass (7수준)Private 33,309 (0.73653) · Self-emp-not-inc 3,796 (0.08394) · Local-gov 3,100 (0.06855) · State-gov 1,946 (0.04303) · Self-emp-inc 1,646 (0.03640) · Federal-gov 1,406 (0.03109) · Without-pay 21 (0.00046)
Education (16수준)HS-grad 14,783 (0.32688) · Some-college 9,900 (0.21891) · Bachelors 7,570 (0.16739) · Masters 2,514 (0.05559) · Assoc-voc 1,960 (0.04334) · 11th 1,619 (0.03580) · Assoc-acdm 1,507 (0.03332) · 10th 1,223 (0.02704) · 7th-8th 823 (0.01820) · Prof-school 785 (0.01736) · 9th 676 (0.01495) · 12th 577 (0.01276) · Doctorate 544 (0.01203) · 5th-6th 449 (0.00993) · 1st-4th 222 (0.00491) · Preschool 72 (0.00159)
Marital-status (7수준)Married-civ-spouse 21,057 (0.46562) · Never-married 14,598 (0.32279) · Divorced 6,297 (0.13924) · Separated 1,411 (0.03120) · Widowed 1,277 (0.02824) · Married-spouse-absent 552 (0.01221) · Married-AF-spouse 32 (0.00071)
Occupation (14수준)Craft-repair 6,021 (0.13314) · Prof-specialty 6,008 (0.13285) · Exec-managerial 5,984 (0.13232) · Adm-clerical 5,540 (0.12250) · Sales 5,409 (0.11960) · Other-service 4,808 (0.10632) · Machine-op-inspct 2,970 (0.06567) · Transport-moving 2,316 (0.05121) · Handlers-cleaners 2,046 (0.04524) · Farming-fishing 1,480 (0.03273) · Tech-support 1,420 (0.03140) · Protective-serv 976 (0.02158) · Priv-house-serv 232 (0.00513) · Armed-Forces 14 (0.00031)
Relationship (6수준)Husband 18,668 (0.41279) · Not-in-family 11,702 (0.25876) · Own-child 6,626 (0.14652) · Unmarried 4,788 (0.10587) · Wife 2,091 (0.04624) · Other-relative 1,349 (0.02983)
Race (5수준)White 38,904 (0.86025) · Black 4,228 (0.09348) · Asian-Pac-Islander 1,304 (0.02883) · Amer-Indian-Eskimo 435 (0.00962) · Other 353 (0.00781)
Sex (2수준)Male 30,529 (0.67506) · Female 14,695 (0.32494)
Native-country(수정) (7수준)North America 41,720 (0.92253) · Centeral America 1,513 (0.03346) · South-East&Central Asia 593 (0.01311) · West Europe 575 (0.01271) · East Asia 391 (0.00865) · East Europe 232 (0.00513) · South America 200 (0.00442)

편중된 상위 수준만 보고 넘어갈 때 놓치는 것은 극소 수준의 존재다. Married-AF-spouse 32건, Armed-Forces 14건, Without-pay 21건, Preschool 72건처럼 표본이 수십 건인 수준들이 뒤에서 로지스틱 모수추정값의 표준오차를 키우고(Education의 Preschool 수준은 추정값 5.6412에 표준오차 3.6638로 유의하지 않게 나온다) 트리 분할에서 다른 수준과 한 덩어리로 묶인다.

연속형 네 변수의 분위수와 요약통계량은 다음과 같았다.

변수최소10%25%중앙값75%90%97.5%99.5%최대평균표준편차
Age17222837475767769038.54780613.217627
Capital-gain0000008,61499,99999,9991101.38167506.2677
Capital-loss0000001,8872,2584,35688.5915404.94757
Hours-per-week1254040455570859940.93793112.007251

여기서 이 문항 전체의 해석을 지배하는 사실 하나가 나온다. Capital-gain은 90% 분위수까지 0이고 97.5% 분위수가 8,614다. 표본의 90% 이상에서 직장 외 수입이 0인 변수인데, 뒤에 나올 로지스틱 효과 요약에서 이 변수가 LogWorth 569.163으로 1위를 차지한다. '직장 외 수입이 있어야 다른 변수들의 영향이 커진다'는 프로파일러 해석은 이 분포 모양 — 대부분 0이고 소수만 큰 값을 갖는 형태 — 때문에 나온 것이다. Capital-loss도 같은 모양이고, Hours-per-week는 25%·50% 분위수가 모두 40으로 표본의 상당수가 정확히 주 40시간이었다.

12개 변수의 도수분포·분위수·요약통계량 (N = 45,224). Married-AF-spouse 32건, Armed-Forces 14건 같은 극소 수준과, Capital-gain이 90% 분위수까지 0이라는 사실이 함께 보인다.
12개 변수의 도수분포·분위수·요약통계량 (N = 45,224). Married-AF-spouse 32건, Armed-Forces 14건 같은 극소 수준과, Capital-gain이 90% 분위수까지 0이라는 사실이 함께 보인다.

문항 1 탐색 — 두 변수만 놓고 보면 틀린다

성별과 인종은 단변량 그림에서 눈에 띄었지만, 12개 변수를 함께 넣자 기여도 9위와 12위로 밀렸다.

목표변수와 각 변수를 하나씩 대응시켜 본 결과를 정리하면 다음과 같다.

변수관찰
평행좌표 그림5만 불 이하와 이상 사이에 특이점 현상의 특별한 차이는 없었으나, 이상인 쪽에서 Capital-gain이 99999인 값이 있음을 확인했다
나이5만 불 이상인 사람들의 평균 연령이 더 높다. 다만 사분위 분포는 이하인 쪽이 더 넓다
교육수준취학 전이 5만 불 이하 비율이 가장 높고 12th까지도 이하가 많다. 고등학교 졸업, 전문대 순으로 이상 비율이 늘고, 학사 < 석사 < 박사 순으로 5만 불 이상이 많았다
결혼여부기혼이 5만 불 이상 비율이 가장 높고 이혼·사별이 그다음이었다
직업경영 관련(Exec-managerial)과 교수·전문직(Prof-specialty)의 5만 불 이상 비율이 상당히 높고, 판매·수리원도 높았다
인종·성별인디언·에스키모·흑인·기타에서 이하 비율이 높고, 성별에서도 비율 차이가 보였다

결혼여부 결과에는 곧바로 반론이 붙었다. 결혼하지 않은 사람은 연령층이 낮고, 연령이 낮으면 수입이 낮다. 기혼-고수입의 관계가 사실은 나이의 효과일 수 있다. 그래서 연령을 17–27 · 27–35 · 35–42 · 42–51 · 51–90 다섯 구간으로 나눈 뒤 구간마다 결혼여부별 비율을 다시 그렸다. 어느 연령 구간에서도 기혼(Married-civ-spouse)의 5만 불 이상 비율이 같은 구간의 다른 결혼 상태보다 높게 유지되었다. 다만 가장 어린 17–27 구간은 어느 수준이든 5만 불 이상이 드물어 차이가 얇게만 보인다. 나이로 설명되는 효과가 아니었다.

인종·성별에 대해서는 보고서에 이렇게 적었다 — 두 변수만 비교하는 것은 사전 탐색이고 모든 변수의 영향을 함께 고려해야 한다. 그 확인이 JMP의 예측 변수 선별이었다.

순위예측 변수기여도부분
1Marital-status2604.580.2353
2Relationship2459.850.2223
3Capital-gain1615.170.1459
4Education1246.620.1126
5Age1143.330.1033
6Occupation1127.670.1019
7Hours-per-week392.870.0355
8Capital-loss219.480.0198
9Sex126.720.0114
10Workclass85.850.0078
11Native-country(수정)25.160.0023
12Race20.280.0018

단변량 탐색에서 눈에 띄던 성별·인종이 9위(0.0114)와 12위(0.0018)로 내려앉고, 기혼여부·가족관계·직장 외 수입·교육·나이가 상위를 차지했다. Race의 부분 기여도 0.0018은 Marital-status의 0.2353의 130분의 1이다.

연령을 17–27 · 27–35 · 35–42 · 42–51 · 51–90 다섯 구간으로 나눈 뒤 다시 그린 '50k(수정) 대 Marital-status' 모자이크 그림. 27–35 구간부터 Married-civ-spouse의 파란 영역(5만 불 이상)이 다른 결혼 상태보다 뚜렷하게 넓고, 17–27
연령을 17–27 · 27–35 · 35–42 · 42–51 · 51–90 다섯 구간으로 나눈 뒤 다시 그린 '50k(수정) 대 Marital-status' 모자이크 그림. 27–35 구간부터 Married-civ-spouse의 파란 영역(5만 불 이상)이 다른 결혼 상태보다 뚜렷하게 넓고, 17–27 구간은 어느 수준이든 파란 영역이 얇다.
JMP 예측 변수 선별. Marital-status(2604.58)와 Relationship(2459.85)이 1·2위이고, Sex·Workclass·Native-country·Race는 하위 네 자리로 밀렸다.
JMP 예측 변수 선별. Marital-status(2604.58)와 Relationship(2459.85)이 1·2위이고, Sex·Workclass·Native-country·Race는 하위 네 자리로 밀렸다.

문항 1 — 연속형 네 변수는 서로 무관했고, 주성분은 55.6%만 설명했다

다변량 분석은 연속형 네 변수만 대상으로 했고, 결과는 상관이 사실상 없다는 것이었다.

상관행렬은 다음과 같았다(행별 방법으로 추정했다고 출력에 명시되어 있다).

AgeCapital-gainCapital-lossHours-per-week
Age1.00000.07720.05690.0716
Capital-gain0.07721.0000−0.03140.0822
Capital-loss0.0569−0.03141.00000.0545
Hours-per-week0.07160.08220.05451.0000

상관계수의 절댓값 최대가 0.0822(Capital-gain–Hours-per-week)다. 네 변수는 서로 거의 독립이었다. 이어서 수행한 주성분 분석의 고유값은 이렇다.

성분고유값설명 비율누적
성분 11.191729.8%29.8%
성분 21.030625.8%55.6%
성분 30.8978
성분 40.8798

고유값이 1을 넘는 성분이 둘이어서 '주성분 2개 채택'이 나왔지만, 그 둘이 설명하는 것은 전체 변동의 55.6%뿐이다. 부하량 그림에서 Age와 Hours-per-week가 성분 1 축에 거의 겹쳐 놓이고, Capital-loss는 성분 2의 양(+0.8) 방향, Capital-gain은 음(−0.6) 방향으로 서로 반대편에 놓였다. 스크리 그림도 1.19에서 0.88까지 완만하게 떨어져 꺾임이 없다.

이 숫자들이 있어야 뒤에 나오는 결과 하나가 설명된다 — 주성분을 저장해 다시 돌린 판별분석의 오분류율(23.1846%)이 원 변수 판별분석(22.7379%)보다 나빴다. 상관이 0.08 이하인 변수들을 두 축으로 압축하면 없앨 중복이 없는 대신 44.4%의 변동을 그냥 잘라 내는 셈이기 때문이다.

주성분 분석. 고유값 1.1917 · 1.0306 · 0.8978 · 0.8798로 1을 넘는 성분이 둘이고 누적 설명 비율은 55.6%다. 부하량 그림에서 Capital-loss와 Capital-gain이 성분 2의 반대편에 놓인다.
주성분 분석. 고유값 1.1917 · 1.0306 · 0.8978 · 0.8798로 1을 넘는 성분이 둘이고 누적 설명 비율은 55.6%다. 부하량 그림에서 Capital-loss와 Capital-gain이 성분 2의 반대편에 놓인다.

문항 1 — 이상값 311건 중 229건이 하나의 값이었다

이상값을 지웠는지가 아니라, 지우지 않기로 한 근거를 어디서 찾았는지가 이 절의 내용이다.

분위수 범위 이상값 탐색을 꼬리 분위수 0.1 · Q 3으로 수행했다. 이상값 정의는 1분위수와 3분위수로부터 분위수 간 범위의 Q배를 넘는 값이고, 12개 변수 중 이상값이 나온 것은 Capital-gain 하나뿐이었다.

10% 분위수90% 분위수낮은 임계높은 임계이상값 수
Capital-gain05,013−15,03920,052311

여기서 앞 절의 분위수 표와 어긋나 보이는 값이 하나 있다. 분포 출력에서 Capital-gain의 90% 분위수는 0인데 이 표에는 5,013으로 적혀 있다. 이유는 같은 화면에 JMP가 직접 적어 두었다 — 중앙값에서의 큰 그룹을 방지하기 위해 일부 분위수가 늘려졌습니다. 표본의 90% 이상이 0이라 10%·90% 분위수가 모두 0이 되면 임계값이 0으로 붕괴하므로, JMP가 위쪽 분위수를 0이 아닌 값까지 밀어 올린 것이다. 임계값은 그렇게 얻은 5,013으로 계산되어 있다 — 낮은 임계 0 − 3 × 5,013 = −15,039, 높은 임계 5,013 + 3 × 5,013 = 20,052.

높은 임계 20,052를 넘은 311건의 값 분포가 함께 출력되었다 — 22040(1건), 25124(4건), 25236(14건), 27828(56건), 34095(4건), 41310(3건), 99999(229건). 즉 이상값 311건 중 229건이 99999라는 하나의 값이고, 나머지도 여섯 개의 특정 값에 몰려 있다. 연속적으로 흩어진 극단값이 아니라 소수의 값에 뭉쳐 있는 형태였다.

9모음값 탐색 결과도 함께 실려 있다.

개수가장 높은 9모음값90% 분위수
Capital-gain22999,9995,013
Hours-per-week1239955

Hours-per-week에도 주 99시간이 123건 있었다. 두 변수 모두 상한에 값이 뭉쳐 있는 형태 — 조사 상한에서 잘린 값으로 보이는 구조 — 였지만, 이상값으로 처리해 제외하지는 않았다. 근거는 데이터 창을 직접 열어 확인한 것이었다. 99999를 가진 행(행 번호 26826)이 Never-married · Prof-specialty · Not-in-family · White · Male이었고, 전문직처럼 실제로 높은 수입을 내는 직업이므로 잘못 입력된 값이 아니라고 판단했다.

지금 다시 보면 이 판단에는 빈틈이 있다. 229건이 정확히 같은 값 99999라는 것은 실제 수입의 분포라기보다 상한 절단(top coding)의 흔적으로 읽는 편이 자연스럽고, 그렇다면 '제외하지 않는다'와 '그 값을 그대로 회귀·트리에 넣는다'는 다른 결정이다. 작업용 덱의 같은 슬라이드에도 ‘나중에 해볼 것’이라는 메모가 남아 있다. 대회 시간 안에는 대안(상한 지시변수 추가, 절단 회귀)을 시도하지 못했다.

이상값 탐색 화면. Capital-gain의 낮은 임계 −15,039 · 높은 임계 20,052 · 이상값 311건이고, 값 분포에서 99999가 229건으로 대부분을 차지한다.
이상값 탐색 화면. Capital-gain의 낮은 임계 −15,039 · 높은 임계 20,052 · 이상값 311건이고, 값 분포에서 99999가 229건으로 대부분을 차지한다.

문항 1 모형 (1) — 판별분석 22.7%에서 의사결정나무 15.2%로

선형 판별 경계로는 22.7%가 한계였고, 조건부 분할로 바꾸자 오분류율이 3분의 2로 줄었다. 과적합이 없었다는 것은 ROC 두 벌로 확인했다.

판별분석은 사전확률을 발생횟수에 비례하도록 설정해(0: 0.7521, 1: 0.2479) 수행했다.

모형개수오분류 수오분류 비율엔트로피 R²−2×로그 우도
판별분석 (원 변수)45,22410,28322.7379%0.1448343,314.5
판별분석 (주성분 저장 후)45,22423.1846%0.14150

원 변수 판별분석의 혼동행렬은 다음과 같았다. 실제 1(5만 불 이상) 11,210건 중 2,100건만 맞혔다 — 재현율 18.7%다.

실제 → 예측01
032,8411,173
19,1102,100

의사결정나무는 정확도 향상이 멈추는 최소의 분할까지 분할했다. 첫 분할은 Marital-status로, (Married-civ-spouse, Married-AF-spouse) 14,231건과 (Widowed, Divorced, Married-spouse-absent, Separated, Never-married) 16,229건으로 갈렸다(루트 G² 33,991.26, LogWorth 1466.8856).

측도훈련검증정의
엔트로피 R²0.41850.42041 − Loglike(모형)/Loglike(0)
일반화 R²0.55580.5566(1−(L(0)/L(모형))^(2/n))/(1−L(0)^(2/n))
평균 −Log p0.32660.3227Σ −Log(ρ[j])/n
RASE0.32320.3199√(Σ(y[j]−ρ[j])²/n)
평균 절대 편차0.20910.2064Σ |y[j]−ρ[j]|/n
오분류 비율0.15160.1457Σ (ρ[j]≠ρMax)/n
N30,21815,006

22.7%에서 15.2%로 떨어졌다. 목표변수와 변수들의 관계가 선형 판별 경계보다 조건부 분할에 잘 맞았다는 뜻이다.

오분류율만으로는 모형이 상위 구간을 얼마나 잘 골라내는지 알 수 없어 ROC와 Lift를 훈련·검증 두 벌로 확인했다.

훈련검증
ROC 곡선 아래 면적0.89980.8962
Lift 최대 (5만 불 이상 클래스)약 4.0 (부분 0.05 부근)약 4.0 (부분 0.05 부근)
Lift 최대 (5만 불 미만 클래스)약 1.33약 1.33

훈련 0.8998과 검증 0.8962의 차이가 0.0036이고 오분류 비율도 0.1516 대 0.1457이다. '정확도 향상이 멈추는 최소의 분할'까지만 자른 결과 과적합이 사실상 없는 상태였다는 것이 두 지표에서 함께 확인된다.

Lift 곡선은 다른 이야기를 한다. 5만 불 이상 클래스의 Lift가 상위 5% 구간에서 4.0에 근접한다 — 모형 점수 상위 5%만 뽑으면 무작위 추출보다 약 4배 밀도로 고소득자를 골라낼 수 있다는 뜻이고, 부분 0.30에서도 2.5 부근을 유지한다. 반면 5만 불 미만 클래스는 1.33을 넘지 못한다. 오분류율 14~15%라는 단일 숫자보다 이 비대칭이 모형의 쓸모를 더 정확히 말해 준다.

JMP 의사결정나무. 첫 분할이 Marital-status(14,231 대 16,229)이며 이후 Education → Capital-gain → Capital-loss → Occupation / Age → Hours-per-week로 이어진다.
JMP 의사결정나무. 첫 분할이 Marital-status(14,231 대 16,229)이며 이후 Education → Capital-gain → Capital-loss → Occupation / Age → Hours-per-week로 이어진다.
의사결정나무 ROC·Lift 곡선. ROC 면적 훈련 0.8998 / 검증 0.8962이고, 5만 불 이상 클래스의 Lift가 상위 5% 구간에서 약 4.0에 이른다.
의사결정나무 ROC·Lift 곡선. ROC 면적 훈련 0.8998 / 검증 0.8962이고, 5만 불 이상 클래스의 Lift가 상위 5% 구간에서 약 4.0에 이른다.

문항 1 모형 (2) — 좌·우 서브트리를 끝까지 읽으면 임계값이 서로 다르다

노드마다 개수·G²·LogWorth가 붙어 있어, 같은 변수가 결혼 상태에 따라 다른 임계값으로 쓰였다는 것이 보인다.

루트가 Marital-status로 갈린 뒤 좌·우 서브트리는 각각 한 장씩 캡처되어 있다. 두 서브트리의 개수 합은 14,231 + 16,229 = 30,460이다.

좌측 노드 — Marital-status(Married-civ-spouse, Married-AF-spouse) · 개수 14,231 · G² 19,580.562 · LogWorth 574.12466

분할개수LogWorth
1Education(Prof-school, Doctorate, Masters, Bachelors)4,1824,929.0114120.53696
2Capital-gain ≥ 517861514.841618
2Capital-gain < 51783,5674,490.818658.746666
3Capital-loss ≥ 1825370112.60019
3Capital-loss < 18253,1974,166.406930.163529
4Occupation(사무·판매·전문·경영 계열 7수준)2,8423,571.458
4Occupation(생산·운송·서비스 계열 6수준)355465.29021
1Education(Assoc-acdm 이하 12수준)10,04912,812.44301.474
2Capital-gain ≥ 5178484112.43227
2Capital-gain < 51789,56511,723.711115.61694
3Occupation(사무·판매·전문·경영 계열 6수준)3,7955,167.945239.676141
4Capital-loss ≥ 1848181155.9384727.79922
5Capital-loss < 2002 / ≥ 2002145 / 3611.946555 / 40.48813
4Capital-loss < 18483,6144,866.467934.136171
5Age ≥ 313,0364,161.102121.798458
6Hours-per-week ≥ 35 / < 352,751 / 2853,797.4963 / 287.98014
5Age < 31578590.4572
3Occupation(생산·운송·서비스 계열 8수준)5,7706,134.725448.02708
4Education(Assoc-acdm, Assoc-voc, Some-college, HS-grad, 12th)4,5345,205.162838.779951
5Age ≥ 293,9554,739.62331.561147
6Capital-loss ≥ 1848138162.4314328.961252
7Capital-loss < 2002 / ≥ 200298 / 4026.825343 / 30.141613
6Capital-loss < 18483,8174,459.3659
5Age < 29579335.74025
4Education(10th 이하 7수준)1,236732.77652

우측 노드 — Marital-status(Widowed, Divorced, Married-spouse-absent, Separated, Never-married) · 개수 16,229 · G² 8,065.93 · LogWorth 551.51337

분할개수LogWorth
1Capital-gain ≥ 726231795.555946
1Capital-gain < 726215,9126,331.6748198.54333
2Education(Doctorate, Prof-school, Masters, Bachelors)3,3362,794.513768.08356
3Age ≥ 282,3762,366.220939.994251
4Hours-per-week ≥ 44 / < 44873 / 1,5031,099.9319 / 1,133.0575
3Age < 28960209.63113
2Education(Assoc-acdm 이하 12수준)12,5762,871.27556.406724
3Age ≥ 297,1452,350.120534.181438
4Occupation(전문·경영·보호·공예·기술·운송·판매 7수준)3,3041,638.1351
4Occupation(사무·양식·기계·처리·기타서비스·가정부 6수준)3,841567.80367
3Age < 295,431340.2838

두 서브트리를 나란히 놓으면 이런 것들이 드러난다.

  • Capital-gain 임계가 다르다 — 기혼 쪽은 5178, 미혼·이혼 쪽은 7262에서 갈렸다. 같은 직장 외 수입이라도 결혼 상태에 따라 5만 불을 가르는 지점이 달랐다.
  • Age 임계가 다르다 — 기혼 쪽은 29와 31, 미혼 쪽은 28과 29였다. 나이 경계가 28~31에 몰려 있다.
  • Hours-per-week 임계도 갈렸다 — 기혼 쪽은 35시간, 미혼 고학력 쪽은 44시간이었다.
  • 기혼 쪽 G²가 두 배 이상 크다 — 개수는 14,231 대 16,229로 비슷한데 G²는 19,580.562 대 8,065.93이다. 미혼·이혼 집단은 이미 5만 불 미만으로 쏠려 있어 더 쪼갤 불순도가 적었고, 실제로 우측 서브트리는 좌측보다 얕게 끝났다.

이 표를 만들면서 확인하지 못한 것이 하나 있다. 좌·우 노드 개수의 합은 30,460인데 적합 상세 정보의 훈련 N은 30,218이다. 242행 차이가 나며, 서로 다른 실행 결과가 보고서에 섞여 들어간 것으로 보인다.

문항 1 모형 (3) — 로지스틱: AUC 0.905, 그리고 뒤집힌 변수 순위

같은 데이터에서 '어느 변수가 중요한가'의 답이 모형 종류에 따라 순서까지 바뀌었다.

전체 모형 검정과 적합도는 다음과 같았다.

모형−1×로그 우도DF카이제곱Prob>ChiSq
차이10,635.5586021,271.12<.0001*
전체14,689.475
축소25,325.033
측도
엔트로피 R²(U)0.4200
일반화 R²0.5569
RASE0.3227
오분류 비율0.1520
AICc / BIC29,501.1 / 30,032.8
N45,224

훈련 혼동행렬과 AUC는 이랬다.

실제 → 예측01클래스별 재현율
031,5822,43292.85%
14,4406,77060.39%

AUC는 0.90533으로 의사결정나무의 훈련 AUC 0.8998보다 오히려 높았다. 5만 불 이상 클래스의 재현율도 60.39%로, 판별분석의 18.7%와는 다른 수준이다.

모수추정값 중 유의성이 뚜렷했던 항을 옮기면 다음과 같다. 목표변수 코딩상 음의 추정값이 5만 불 이상 쪽으로 미는 방향이다.

추정값표준 오차카이제곱Prob>ChiSq
절편6.271556120.3208783382.01<.0001*
Capital-gain−0.00031818.7083e-61334.6<.0001*
Hours-per-week−0.02880110.0013711441.22<.0001*
Capital-loss−0.00064563.1158e-5429.26<.0001*
Age−0.02497790.0013875324.07<.0001*
Sex[Female]0.356740440.032546120.15<.0001*
Marital-status[Never-married]1.110442940.1019708118.59<.0001*
Occupation[Exec-managerial]−0.92552650.0913084102.74<.0001*
Marital-status[Married-civ-spouse]−1.61767090.170534589.98<.0001*
Education[Prof-school]−2.36491770.269258877.14<.0001*
Education[Doctorate]−2.34089140.275354672.27<.0001*
Occupation[Prof-specialty]−0.67336120.094180651.12<.0001*
Education[Masters]−1.75879390.253485248.14<.0001*
Occupation[Farming-fishing]0.839457480.126749143.86<.0001*
Native-country(수정)[North America]−0.39142390.075298927.02<.0001*
Occupation[Priv-house-serv]1.849578540.70122366.960.0083*
Education[Preschool]5.641204393.66384062.370.1236
Occupation[Armed-Forces]−0.35052050.82869790.180.6723

표 아래쪽 세 행이 앞에서 말한 극소 수준의 결과다. Priv-house-serv(232건) 0.7012 · Education[Preschool](72건) 3.6638 · Armed-Forces(14건) 0.8287로, 같은 종류의 다른 항들과 자릿수가 다르다. 나머지 직업 항의 표준오차는 0.09~0.13이고 나머지 교육수준 항은 0.25~0.44이므로, 각각 다섯 배에서 아홉 배, 여덟 배에서 열다섯 배다. 셋 다 카이제곱이 7 이하로 떨어져 Preschool과 Armed-Forces는 유의하지 않게 나왔다.

그리고 이 문항에서 가장 흥미로운 지점이 효과 요약이다.

순위소스LogWorthJMP 예측변수 선별에서의 순위
1Capital-gain569.1633위 (기여도 1615.17)
2Education302.6414위 (1246.62)
3Occupation170.2826위 (1127.67)
4Hours-per-week99.3767위 (392.87)
5Capital-loss97.1128위 (219.48)
6Age72.3085위 (1143.33)
7Relationship65.4272위 (2459.85)
8Workclass38.42210위 (85.85)
9Marital-status31.7551위 (2604.58)
10Sex27.8639위 (126.72)
11Native-country(수정)8.82711위 (25.16)
12Race4.07112위 (20.28)

예측변수 선별에서 1·2위였던 Marital-status와 Relationship이 로지스틱 효과 요약에서는 9위·7위로 내려앉고, 3위였던 Capital-gain이 1위로 올라선다. 의사결정나무는 실제로 Marital-status를 루트 분할로 골랐는데, 로지스틱에서는 같은 변수의 기여가 Capital-gain의 18분의 1이다. 조건부 분할에 강한 변수와 선형 로그오즈에 강한 변수가 다르다는 것을 두 표가 나란히 보여 준다. 변수 중요도를 하나의 순위표로 보고하는 관행이 왜 위험한지가 여기 있다.

JMP 세 모형의 훈련 성능을 한 표로 모으면 이렇다.

모형오분류 비율엔트로피 R²AUC
판별분석 (원 변수)22.7379%0.14483
판별분석 (주성분)23.1846%0.14150
로지스틱15.20%0.42000.90533
의사결정나무15.16% 훈련 / 14.57% 검증0.4185 / 0.42040.8998 / 0.8962
로지스틱 효과 요약. Capital-gain 569.163이 1위, Marital-status 31.755가 9위로, 예측변수 선별의 순위(Marital-status 1위)와 뒤집혔다.
로지스틱 효과 요약. Capital-gain 569.163이 1위, Marital-status 31.755가 9위로, 예측변수 선별의 순위(Marital-status 1위)와 뒤집혔다.

문항 1 모형 (4) — EC Miner 네 모형: 개선은 소수 클래스에서 왔다

같은 데이터를 두 번째 소프트웨어에 올려 훈련 2/3 · 검증 1/3으로 다시 풀었다. 그리고 JMP와 결과가 갈리는 지점이 나왔다.

같은 데이터를 두 번째 소프트웨어에 올려, 문항 1·2 각각에 대해 훈련용 2/3와 검증용 1/3으로 나눠 네 모형을 돌렸다.

표를 읽기 전에 한 가지. 제출 보고서에서 두 번째 모형이 실린 슬라이드의 제목은 앞 장과 똑같이 ‘EC 마이너: Logistic’이지만, 그 안에 붙은 결과 창의 이름은 LDA다. 제목이 복사되면서 고쳐지지 않은 것으로 보고, 아래 표에는 창에 찍힌 이름대로 적었다.

모형Model (2/3) 오분류 수Model 오분류율Test (1/3) 오분류 수Test 오분류율
Logistic6,20420.58%3,15420.92%
LDA (판별분석)8,73628.98%4,30828.58%
CART4,25314.11%2,11114.00%
SVM4,21513.98%2,10913.99%

클래스별로 보면 차이가 분명해진다.

모형 (Test 1/3)실제 0 → 예측 0실제 0 → 예측 1실제 1 → 예측 0실제 1 → 예측 1
Logistic10,770 (95.58%)498 (4.42%)2,656 (69.77%)1,151 (30.23%)
LDA8,441 (74.91%)2,827 (25.09%)1,481 (38.90%)2,326 (61.10%)
CART10,577 (93.87%)691 (6.13%)1,420 (37.30%)2,387 (62.70%)
SVM10,563 (93.74%)705 (6.26%)1,404 (36.88%)2,403 (63.12%)

전체 오분류율의 개선(20.92% → 13.99%)은 대부분 소수 클래스를 잡아내는 능력에서 왔다. 실제 1을 맞힌 비율이 로지스틱 30.23%에서 SVM 63.12%로 두 배 넘게 올랐고, 그 대가로 실제 0을 틀리는 비율은 4.42%에서 6.26%로 조금 올랐다. LDA는 반대 방향의 극단이다 — 실제 1을 61.10%나 맞히지만 실제 0을 25.09%나 틀려 전체 오분류율이 28.58%로 가장 나쁘다.

두 도구를 병행했기 때문에 드러난 것이 하나 더 있다. JMP에서는 로지스틱(15.20%)과 의사결정나무(15.16%)가 사실상 동급이었는데, EC Miner에서는 Logistic 20.92% 대 CART 14.00%로 7%p나 벌어졌다. 같은 모형 계열이라도 소프트웨어의 기본 설정 — 범주형 변수 코딩, 정지 규칙 — 에 따라 결과가 이만큼 달라진다. 한 도구의 결과만 보고 '로지스틱은 트리보다 나쁘다'고 적었다면 틀린 결론이 됐을 것이다.

EC Miner의 표본추출 화면. 문항 1과 문항 2 각각에 대해 데이터를 훈련용과 검증용으로 나눴고, 검증용 1,914건이 저장된 것이 찍혀 있다.
EC Miner의 표본추출 화면. 문항 1과 문항 2 각각에 대해 데이터를 훈련용과 검증용으로 나눴고, 검증용 1,914건이 저장된 것이 찍혀 있다.

문항 1 — 틀린 예측만 따로 모아 다시 분석했다

이 보고서에서 가장 시간을 많이 쓴 부분은 성능표가 아니라 오분류 행의 부분집합이었다.

모형이 틀린 행만 부분집합으로 만들어 변수별로 다시 분석했다. 결과는 다음과 같았다.

변수오분류 행에서 발견한 패턴해석
Capital-gain오분류 행들은 직장 외 수입이 높은 사람에 대해 1이 높게 나타났다다른 변수들이 0을 가리키는데도 직장 외 수입이 많아 5만 불 이상인 사람을 틀렸다
Workclass'이하'라고 오분류한 행들은 직장형태가 대부분 Private였다개인 일을 하는 사람의 수입은 예측하기 어렵다
Education오분류된 사람 중 5만 불 이상을 받는 쪽은 직장에서 버는 돈이 아니라 지출(Capital-loss)이 많았고, 학사·석사 학위자와 전문대 재학자가 많았다고학력·고지출 집단이 모형의 사각지대였다
Marital-status기혼자인데 실제로는 5만 불 이상인 사람을 0으로 분류한 오분류가 많았다1위 예측 변수인 결혼여부가 오히려 오분류를 만드는 지점이 있었다
Occupation경영(Exec-managerial)과 교수·전문직(Prof-specialty)의 오분류율이 높았다5만 불 이상 비율이 높은 직업일수록 그 안의 분산도 커서 예측이 어렵다

이어서 예측 프로파일러로 변수 간 상호작용을 확인했다.

  • 의사결정나무 프로파일러 — Capital-gain(직장 외 수입)이 있어야 다른 변수들의 영향이 커진다.
  • 로지스틱 프로파일러 — 나이가 많아지면 다른 변수들의 영향력이 줄어든다. Capital-gain이 없는 사람은 다른 변수의 영향을 적게 받고 5만 불 이하인 경우가 많으며, Capital-gain이 조금 있는 사람이 다른 변수들의 영향을 많이 받는다.
  • 직업별 프로파일러 — 14개 직업을 각각 나눠 프로파일러를 다시 확인했다.

직업별 프로파일러가 이 문항에서 가장 공을 들인 부분이다. 원본에는 14개 직업의 번호와 한글 대역이 함께 적혀 있고, 일반적인 번역과 다른 항목이 있어(Farming-fishing을 '양식업', Handlers-cleaners를 '처리기 클리너', Prof-specialty를 '전문'으로 적었다) 표로 남겨 둔다.

#Occupation원본의 한글 대역표본 수교육수준의 영향도
4Exec-managerial경영진5,984상대적으로 교육수준에 영향을 받는다
10Prof-specialty전문6,008교육에 영향을 많이 받는다
5Farming-fishing양식업1,480상대적으로 영향을 덜 받는다
6Handlers-cleaners처리기 클리너2,046상대적으로 영향을 덜 받는다
9Priv-house-serv가정부232교육수준에 영향을 많이 받지 않는다
1 · 3 · 7 · 8 · 11 · 12 · 13 · 14Adm-clerical · Craft-repair · Machine-op-inspct · Other-service · Protective-serv · Sales · Tech-support · Transport-moving사무 행정 · 공예 수리 · 기계 조작 · 기타 서비스 · 보호 서비스 · 판매 · 기술 지원 · 운송 이동976 ~ 6,021보고서에 별도 언급 없음
2Armed-Forces14보고서에 별도 언급 없음

이 문항의 결론은 변수의 영향도가 전역적으로 고정된 값이 아니라 다른 변수의 수준에 따라 달라진다는 것이었다. 단일 계수표만으로는 보이지 않는 구조였고, 프로파일러를 직업 14개로 쪼개서 하나씩 확인해야 드러났다.

동시에 이 분석의 한계도 표에서 그대로 보인다. '가정부는 교육수준에 거의 영향을 받지 않는다'는 관찰은 232건 위에서 나온 것이고, 그 직업의 로지스틱 표준오차는 0.7012로 다른 직업 항의 다섯 배가 넘는다. Armed-Forces는 14건이라 프로파일러 곡선 자체를 신뢰할 수 없다. 관찰의 신뢰도가 직업마다 크게 달랐다는 사실은 도수분포와 표준오차를 나란히 놓아야 드러나는데, 대회 보고서에는 그 대조를 적지 못했다.

직업별로 나눠 확인한 예측 프로파일러. 양식업과 처리기 클리너는 다른 변수의 영향을 덜 받고, 경영진은 교육수준에 크게 반응한다.
직업별로 나눠 확인한 예측 프로파일러. 양식업과 처리기 클리너는 다른 변수의 영향을 덜 받고, 경영진은 교육수준에 크게 반응한다.

문항 2 — 9,568인가 9,567인가: 데이터와 기술통계

결측도 없고 이상값도 없는 데이터였다. 대신 문제 설명의 행 수와 JMP 출력의 행 수가 하나 어긋났다.

문항 2의 데이터는 복합형 화력 발전소가 최적 상황일 때의 전력 생산량 기록 9,568개(2006~2011)였다. 변수는 다섯이다.

변수명의미 및 범위
AT시간당 평균 온도, 1.81℃ ~ 37.81℃
V시간당 평균 배기 압력, 25.36 ~ 81.56 cm Hg
AP시간당 평균 주변 압력, 992.89 ~ 1033.3 millibar
RH시간당 평균 습도, 25.56% ~ 100.16%
PE시간당 전력 생산량 (목표변수), 420.2 ~ 495.76 MW

결측값 탐색 결과 AT·V·AP·RH 네 열의 결측 수가 모두 0이었다. 이상값도 문항 1과 같은 설정(꼬리 분위수 0.1 · Q 3)으로 탐색했는데 네 열 모두 0건이었다.

10% 분위수90% 분위수낮은 임계높은 임계이상값 수
AT9.33829.242−50.37488.9540
V39.7271.58−55.86167.160
AP1006.041020.82961.6921065.170
RH52.74691−62.016205.7620

같은 기준을 두 문항에 똑같이 적용했더니 한쪽에서는 311건이 나오고 다른 쪽에서는 0건이 나왔다. 문항 1의 Capital-gain은 90% 분위수가 5,013인데 최대가 99,999이고, 문항 2의 AT는 90% 분위수 29.242에 높은 임계가 88.954로 실제 최대(37.11)보다 한참 위에 있다. 센서로 측정한 물리량과 자기보고식 설문 항목의 차이가 이 표 한 장에 그대로 나온다.

기술통계 전체를 복원하면 다음과 같다.

측도AT (℃)V (cm Hg)AP (millibar)RH (%)PE (MW)
최대값 (100%)37.1181.561033.3100.16495.76
97.5%3275.081025.6897.106486.528
90.0%29.24271.581020.8291479.022
75.0%25.7266.541017.2684.83468.43
50.0% (중앙값)20.3552.081012.9474.97451.52
25.0%13.5141.741009.163.32439.75
10.0%9.33839.721006.03852.746433.43
2.5%6.1337.4921002.30242.17428.892
최소값 (0%)1.8125.36992.8925.56420.26
평균19.65188354.307171013.261173.306628454.3635
표준편차7.452590412.7078545.93588614.59922217.067247
N9,5679,5679,5679,5679,567

여기서 두 가지가 확인된다.

  • JMP 쪽 실제 분석 N은 9,567이다. 문제 설명의 데이터 규모는 9,568개인데 JMP 분포와 MLR 적합 요약(관측값 수 9,567), 단계별 회귀의 DFE 9,565(= 9,567 − 2)가 모두 9,567에 맞춰져 있다. 그런데 EC Miner 쪽 ANOVA 표의 합계 자유도를 역산하면 Model 7,654행 + Test 1,914행 = 9,568로 딱 맞는다. 결측이 없다고 보고했으므로 JMP에서 한 행이 왜 빠졌는지는 원본에 나타나지 않는다.
  • MLR의 중심화 값이 이 평균들이다. 뒤에 나오는 교호작용항의 AT−19.6519, V−54.3072, AP−1013.26, RH−73.3066은 각각 위 표의 평균을 반올림한 값이다. 중심화가 임의의 상수가 아니라 표본 평균이었다는 사실이 이 표를 붙여야 확인된다.

분포 모양도 함께 읽을 수 있다. V는 40 부근과 65~70 부근에 봉우리가 두 개 있는 이봉 분포이고(중앙값 52.08이 두 봉우리 사이의 골에 놓인다), PE는 435~445 구간에 가장 두꺼운 봉우리가 있는 우측 꼬리 분포다.

AT·V·AP·RH·PE 다섯 변수의 분포·분위수·요약통계량. N은 모두 9,567이고, V는 40 부근과 65~70 부근에 봉우리가 둘인 이봉 분포다.
AT·V·AP·RH·PE 다섯 변수의 분포·분위수·요약통계량. N은 모두 9,567이고, V는 40 부근과 65~70 부근에 봉우리가 둘인 이봉 분포다.

문항 2 — 네 변수와 PE의 관계, 주성분 1개, 그리고 MLR

변수 하나씩 PE에 대응시켜 보니 AT만 선형이었고 V는 굽어 있었다. 그 굽음이 뒤에 교호작용항으로 들어갔다.

그래프 빌더의 평활 곡선으로 변수 하나씩 PE와의 관계를 확인했다.

변수PE와의 관계
AT (평균온도)반비례하는 선형적 경향. 평활 곡선이 AT 5 부근의 PE 493에서 AT 31 부근의 PE 428까지 거의 직선으로 떨어진다
V (평균 배기압력)비선형적 경향. 곡선이 V 40에서 44 사이에 493에서 462까지 급락한 뒤 45~70 구간에서 완만해지고, 71 부근에서 되꺾여 아래로 돌아간다
AP (평균 주변압력)비례하는 경향
RH (평균 습도)비례하는 경향

변수 간 산점도 행렬에서는 AT–V가 상향 곡선, AP–AT · AP–V · RH–AT가 하향 곡선의 경향을 보였다. 주성분 분석과 요인분석 결과 주성분은 1개였다.

성분고유값설명 비율누적
성분 12.439261%61%
성분 20.908422.7%83.7%
성분 30.5499
성분 40.1026

부하량 그림에서 AT와 V가 성분 1의 양(+) 방향에 거의 겹쳐 놓이고, AP는 성분 1 음·성분 2 음 방향, RH는 성분 1 음·성분 2 양(+0.72) 방향에 놓였다. 문항 1의 고유값(최대 1.1917, 누적 55.6%)과 대조하면 차이가 분명하다 — 문항 2의 네 설명변수는 실제로 하나의 축을 61%까지 공유했고, 문항 1의 네 변수는 서로 거의 독립이었다. 같은 '주성분 분석'이라는 절차가 두 문항에서 전혀 다른 진단을 내놓은 셈이다.

다중선형회귀(MLR)는 변수를 표본 평균으로 중심화한 뒤 2·3·4차 교호작용항까지 모두 넣어 적합했다. 효과 요약을 LogWorth 내림차순으로 보면 이렇다.

순위소스LogWorthp 값
1AT1739.7830.00000
2V318.4670.00000
3RH112.1620.00000
4AT*V107.3030.00000
5AP71.8260.00000
6AT*V*AP28.8280.00000
7V*AP19.5200.00000
8AT*RH10.7560.00000
9AP*RH6.4370.00000
10AT*AP3.9630.00011
11AT*V*AP*RH3.3960.00040
12V*RH2.4900.00324
13AT*V*RH1.6000.02513
14AT*AP*RH0.3880.40904
15V*AP*RH0.1970.63605

AT의 LogWorth 1739.783은 2위 V(318.467)의 5.5배다. 4위에 이미 2차 교호작용 AT*V(107.303)가 AP 주효과(71.826)보다 앞서 올라온 것도 눈에 띈다 — 단독 주효과보다 온도-배기압력의 상호작용이 더 큰 기여를 했다는 뜻이고, V가 PE와 비선형 관계를 보인다는 탐색 결과와 이어진다. 15개 항 중 유의하지 않게 나온 것은 AT*AP*RH(p = 0.40904)와 V*AP*RH(p = 0.63605) 둘뿐이었지만, 이 두 항도 모형에서 빼지 않았다.

모수 추정값은 절편을 포함해 16행 전체가 이렇게 나왔다. 교호작용항의 이름에 중심화 값이 그대로 붙어 있어 어떤 상수로 뺐는지도 읽힌다.

추정값표준 오차t 비Prob>|t|VIF
절편251.2713814.5609317.26<.0001*
AT−1.8165570.016231−111.9<.0001*7.6869183
V−0.3086230.007773−39.70<.0001*5.1268032
AP0.25959060.01428718.17<.0001*3.7786931
RH−0.1250530.005464−22.88<.0001*3.3436802
(AT−19.6519)*(V−54.3072)0.02014690.00090122.36<.0001*2.2788742
(AT−19.6519)*(AP−1013.26)−0.0100440.002595−3.870.0001*6.8494596
(V−54.3072)*(AP−1013.26)0.01310460.0014189.24<.0001*5.5846819
(AT−19.6519)*(RH−73.3066)−0.006070.000901−6.73<.0001*4.9685327
(V−54.3072)*(RH−73.3066)0.00168470.0005722.950.0032*5.3813434
(AP−1013.26)*(RH−73.3066)−0.0054260.001066−5.09<.0001*4.0501672
(AT−19.6519)*(V−54.3072)*(AP−1013.26)−0.0015650.000138−11.33<.0001*5.2460977
(AT−19.6519)*(V−54.3072)*(RH−73.3066)0.00010760.0000482.240.0251*3.8475123
(AT−19.6519)*(AP−1013.26)*(RH−73.3066)−0.0001230.000149−0.830.40906.6530576
(V−54.3072)*(AP−1013.26)*(RH−73.3066)4.8881e-50.0001030.470.63616.6986264
(AT−19.6519)*(V−54.3072)*(AP−1013.26)*(RH−73.3066)3.0043e-58.487e-63.540.0004*4.3658763

주효과의 부호에서 탐색 단계와 어긋나는 것이 하나 있다. 변수 하나씩 볼 때 RH는 PE와 비례했는데, 네 변수와 교호작용항을 함께 넣은 회귀에서 RH의 계수는 −0.125053(t = −22.88)으로 음수다. 습도가 높은 시간대는 대체로 온도가 낮은 시간대이므로(산점도 행렬의 RH–AT 하향 경향) 단변량에서 보이던 양의 관계는 온도를 통한 것이었고 온도를 함께 넣자 부호가 뒤집힌 것으로 읽힌다. 보고서는 이 뒤집힘을 따로 언급하지 않았다. 문항 1에서 성별·인종이 단변량과 다변량에서 다르게 보인 것과 같은 종류의 일이 여기서는 부호로 나타났다.

측도
0.937454
Adj-R²0.937382
RMSE4.270848
반응 평균454.3635
관측값 수9,567
최대 VIF7.6869183 (AT)

VIF는 모두 10 이하여서 그대로 진행했고, 스튜던트화 잔차 대 예측값 그림에도 경향이 없었다. 그런데 적합 결여 표에는 판정할 수 없는 상태가 남아 있다.

소스DF제곱합평균 제곱
적합 결여9,510173,902.7018.2863
순수 오차410.000.0000
총 오차9,551173,902.70

순수 오차 제곱합이 0.00이다. 설명변수 조합이 완전히 겹치는 반복 관측이 41 자유도만큼 있었는데 그 안에서 PE가 전혀 흔들리지 않았다는 뜻이고, 그래서 적합 결여 검정의 F 비가 계산되지 않았다(Prob > F 칸이 비어 있다). 잔차 그림과 VIF만으로 모형을 통과시켰지만, 적합 결여를 통계적으로 판정할 수는 없는 상태였다.

그래프 빌더의 V 대 PE 평활 곡선. V 40~44 구간에서 PE가 493에서 462까지 급락한 뒤 45~70에서 완만해지고, 71 부근에서 곡선이 되꺾인다. AT 대 PE가 거의 직선인 것과 대비된다.
그래프 빌더의 V 대 PE 평활 곡선. V 40~44 구간에서 PE가 493에서 462까지 급락한 뒤 45~70에서 완만해지고, 71 부근에서 곡선이 되꺾인다. AT 대 PE가 거의 직선인 것과 대비된다.
MLR 효과 요약. AT의 LogWorth 1739.783이 2위 V(318.467)의 5.5배이고, 교호작용 AT*V(107.303)가 AP 주효과(71.826)보다 앞선다. 아래쪽 적합 결여 표에 순수 오차 제곱합 0.00과 빈 Prob > F 칸이 보인다.
MLR 효과 요약. AT의 LogWorth 1739.783이 2위 V(318.467)의 5.5배이고, 교호작용 AT*V(107.303)가 AP 주효과(71.826)보다 앞선다. 아래쪽 적합 결여 표에 순수 오차 제곱합 0.00과 빈 Prob > F 칸이 보인다.
MLR 모수 추정값과 VIF. 교호작용항 이름에 중심화 값(AT−19.6519 · V−54.3072 · AP−1013.26 · RH−73.3066)이 그대로 붙어 있고, VIF는 최대 7.6869183(AT)로 모두 10 이하다. 위쪽 스튜던트화 잔차 그림은 행 번호에 대해 경향 없이 흩어져 있다.
MLR 모수 추정값과 VIF. 교호작용항 이름에 중심화 값(AT−19.6519 · V−54.3072 · AP−1013.26 · RH−73.3066)이 그대로 붙어 있고, VIF는 최대 7.6869183(AT)로 모두 10 이하다. 위쪽 스튜던트화 잔차 그림은 행 번호에 대해 경향 없이 흩어져 있다.

문항 2 — 차원 축소 두 방법은 왜 졌는가

PCR은 전진선택이 한 단계에서 멈췄고, PLS는 요인 네 개를 다 쓰고서야 MLR을 겨우 따라잡았다.

PCA를 활용한 회귀는 주성분을 저장한 뒤 최소 BIC를 정지 규칙으로 삼은 전진선택 단계별 회귀로 적합했다.

SSEDFERMSEAdj-R²CppAICcBIC
456,738.899,5656.91021420.83610.83612264,140.0164,161.5
모수추정값nDFSSF 비Prob>F
절편 (잠금·입력됨)454.363498100.0001
주성분1 (입력됨)−9.992270912,329,75048,789.490

단계 기록에는 1단계에서 주성분1이 추가되고, 2단계에서 그것이 최선으로 특정되며 끝났다고 남아 있다. 즉 최소 BIC 기준의 전진선택이 한 단계에서 멈췄다 — 두 번째 주성분을 넣으면 BIC가 나빠지므로 넣지 않았다는 것이다. 절편 454.363498은 PE의 표본 평균과 같고, 계수 −9.9922709의 부호는 성분 1이 AT·V 쪽 양의 방향이라는 부하량과 짝을 이룬다(온도와 배기압력이 높아지는 방향으로 성분 1이 커질 때 전력 생산량이 줄어든다). 네 변수를 한 축으로 압축하면 R² 0.8361에서 더 늘어날 여지가 통계적으로 없었고, 원 변수 MLR의 0.937454와 0.10 이상 벌어졌다.

부분최소제곱(PLS)에서는 알고리즘 선택이 장비 제약에 걸렸다. NIPALS가 가장 안정적인 알고리즘 중 하나지만 컴퓨터 사양이 따라주지 않아 여러 번 시도해도 실행되지 않았고, 정확도는 다소 떨어지지만 SIMPLS를 썼다. 두 알고리즘의 차이를 따로 조사해 SIMPLS도 사용할 수 있음을 확인한 뒤 진행했다.

요인 수는 0부터 4까지 올리며 PRESS · van der Voet T² · Q² · 변동 설명량을 한 표에서 보고 정했다.

요인 수제곱근 평균 PRESSvan der Voet T²Prob > T²누적 Q²R²X누적 R²XR²Y누적 R²Y
01.0001054533.4434<.0001*−0.0002090.0000000.0000000.0000000.000000
10.3699111226.5378<.0001*0.8631660.6078960.6078960.8632600.863260
20.307669551.12771<.0001*0.9870470.1546010.7624970.0421780.905437
30.289115359.52665<.0001*0.9989170.1641370.9266340.0110700.916507
40.2671700.0000001.00000.9999230.0733661.0000000.0121890.928696

요인 수를 4로 정한 근거는 두 가지다. 제곱근 평균 PRESS가 요인 4에서 최소(0.267170)가 되고, van der Voet T²가 요인 4에서 0(Prob 1.0000)이 되어 최소 PRESS 모형과 유의한 차이가 없어진다 — 요인 3까지는 모두 p < .0001로 기각되었다. 설명변수가 넷이므로 요인 4는 곧 X 변동 100%를 쓰는 것이다. 예측식 PE 대 실제 PE 산점도에서 RMSE 4.13을 얻었다.

이 표에서 새로 읽히는 것은 요인 1이 이미 Y 변동의 86.3260%를 잡는다는 점이다. 요인 2·3·4가 추가로 기여한 것은 4.2178 + 1.1070 + 1.2189 = 6.5437%p에 불과하다. 반대로 X 변동은 요인 1이 60.7896%, 요인 2가 15.4601%, 요인 3이 16.4137%, 요인 4가 7.3366%로 고르게 나뉘었다. Y를 설명하는 방향은 사실상 첫 잠재변수 하나에 몰려 있고 — 주성분 1개가 61%를 설명한다는 PCA 결과와 같은 이야기다 — 나머지 요인은 X 쪽 변동만 채운다.

VIP 대 계수 그림에서 0.8 기준선을 넘는 변수는 둘뿐이었다.

변수VIP (근사)계수 (근사)VIP 0.8 기준
AT1.30−0.87넘음
V1.19−0.17넘음
AP0.72+0.03미달
RH0.61−0.20미달

MLR 효과 요약에서 AT 1739.783 · V 318.467이 1·2위였던 것과 정확히 같은 순서다. 선형회귀의 LogWorth와 PLS의 VIP라는 서로 다른 두 지표가 같은 두 변수를 지목했다는 교차 확인이 된다.

JMP 세 모형의 결과를 정리하면 이렇다.

모델링RMSE모형에 들어간 성분·요인 수
MLR0.9374544.270848원 변수 4개 + 교호작용 11항
PLS (SIMPLS)0.9286964.13잠재요인 4개
PCA 활용 (단계별 회귀)0.83616.9102142주성분 1개

차원 축소가 왜 졌는지가 오른쪽 열에 있다. PLS는 요인 네 개를 전부 써서 X 변동 100%를 소진하고서야 MLR에 근접했고, PCR은 BIC가 한 개 이상을 허락하지 않았다. 설명변수가 넷뿐인 문제에서 차원을 줄이는 일은 애초에 얻을 것이 없는 작업이었다.

PLS 요인 수 선택표. 제곱근 평균 PRESS가 요인 4(0.267170)에서 최소이고 van der Voet T²가 0(Prob 1.0000)이 되며, 요인 1만으로 이미 누적 R²Y 0.863260이다.
PLS 요인 수 선택표. 제곱근 평균 PRESS가 요인 4(0.267170)에서 최소이고 van der Voet T²가 0(Prob 1.0000)이 되며, 요인 1만으로 이미 누적 R²Y 0.863260이다.

문항 2 — EC Miner 네 모형, 최종 비교, 그리고 대상

두 번째 도구에서 같은 네 모형을 돌리자 JMP와 순위가 한 자리 뒤집혔다. 그 이유가 자유도 열에 남아 있었다.

EC Miner에서는 데이터를 랜덤 80% Model / 20% Test로 나누고 MLR·PCR·PLS·SVR 네 모형을 각각 적합해 평가했다. ANOVA 표의 자유도를 역산하면 Model 7,654행 · Test 1,914행으로 합이 9,568이다.

모델링분할회귀 DF잔차 평균제곱RMSEMAEMAPE
MLRModel420.762870.928654.555143.610550.79639
MLRTest420.836420.929064.558733.678430.81080
PCRModel447.743250.835936.907395.534011.21389
PCRTest447.955710.836736.915955.609061.23122
PLSModel239.884780.862906.314205.024891.10207
PLSTest239.710280.864666.296675.094441.11808
SVRModel417.225720.940804.149033.134410.69071
SVRTest419.345390.934144.392593.322410.73162

SVR이 네 모형 중 가장 좋았다. 검증 RMSE 4.39259 · MAE 3.32241 · MAPE 0.73162로, PE의 평균이 454 MW인 데이터에서 평균 절대 오차 3.3 MW · 상대 오차 0.73%다. 훈련(0.94080)과 검증(0.93414)의 R² 차이가 0.0067로 과적합도 크지 않았다.

그런데 JMP와 EC Miner에서 PLS의 성적이 달랐다. JMP PLS는 R² 0.928696이었는데 EC Miner PLS는 0.86290에 그친다. 그 이유가 회귀 자유도 열에 남아 있다 — 다른 세 모형은 DF 4인데 PLS만 DF 2다. JMP에서는 PRESS와 van der Voet T²를 보고 요인 수를 4로 정했지만, EC Miner에서는 잠재요인 두 개로 적합된 것으로 보인다. 같은 이름의 모형이 두 도구에서 다른 것을 적합하고 있었다는 뜻이고, 이 차이를 발견한 것은 결과표 숫자가 아니라 옆에 붙어 있던 자유도였다.

두 도구를 종합한 최종 순위는 SVR > MLR > PLS > PCR이었다.

모델링JMP R²EC Miner 검증 R²두 도구 일치 여부
SVR— (JMP 미수행)0.93414
MLR0.9374540.92906일치
PLS0.9286960.86466불일치 (요인 수 차이)
PCR0.83610.83673일치

정리하면 두 문항에서 같은 결론이 나왔다. 문항 1의 판별분석은 원 변수 22.7379% 대 주성분 23.1846%, 문항 2의 회귀는 MLR 0.937454 대 PCR 0.8361이었다. 차원 축소가 항상 이득은 아니다 — 다만 두 문항에서 이유가 정반대였다. 문항 1은 압축할 중복이 없어서(상관 최대 0.0822) 잃기만 했고, 문항 2는 중복이 커서(주성분 1개가 61%) 한 축으로 눌리는 순간 나머지 39%에 들어 있던 예측 정보를 버렸다.

이 보고서로 2019년 11월 빅데이터 분석 경진대회에서 1위를 받았다. 상의 명칭은 자료마다 갈린다 — 작업용 덱에 옮겨 적힌 대회 규정의 시상 항목은 '최우수상 1명 · 우수상 2명 · 장려상 3명'이고, 이력서와 포트폴리오에는 '대상(1위)'으로 적혀 있다. 상장이 남아 있지 않아 어느 쪽이 맞는지는 확인하지 못했고, 확실한 것은 순위뿐이다.

EC Miner SVR 결과. Model R² 0.94080 · RMSE 4.14903, Test R² 0.93414 · RMSE 4.39259 · MAE 3.32241 · MAPE 0.73162로 네 회귀 모형 중 가장 좋았다.
EC Miner SVR 결과. Model R² 0.94080 · RMSE 4.14903, Test R² 0.93414 · RMSE 4.39259 · MAE 3.32241 · MAPE 0.73162로 네 회귀 모형 중 가장 좋았다.

여기서 배운 것

  1. 지표 하나로 판단하지 않는다. SVM의 오분류율 13.99%는 로지스틱의 20.92%보다 좋지만, 실제로 개선된 것은 소수 클래스 재현율(30.23% → 63.12%)이었다. 전체 정확도만 보고했다면 무엇이 좋아졌는지 말할 수 없었다.
  2. 차원 축소는 목적이 아니라 수단이다. 두 문항 모두 주성분 기반 모형이 원 변수 모형보다 나빴는데, 문항 1은 압축할 중복이 없어서(상관 최대 0.0822) 잃기만 했고 문항 2는 중복이 너무 커서 한 축에 눌리며 예측 정보를 버렸다. 이유가 정반대인데 결론은 같았다.
  3. 같은 이름의 모형이 도구마다 다른 것을 적합한다. EC Miner PLS의 회귀 자유도가 2, JMP PLS의 요인 수가 4였다는 사실은 결과표의 R² 숫자에는 보이지 않고 옆 칸의 자유도에만 남아 있었다. 도구를 두 개 쓴 값어치는 성능 비교가 아니라 이 불일치를 발견한 데 있었다.
  4. 틀린 예측을 들여다보는 것이 성능표를 내는 것보다 많은 것을 말해 준다. 오분류 행만 부분집합으로 만들어 다시 분석해 '개인 사업자의 수입은 예측하기 어렵다', '변수의 영향도는 다른 변수의 수준에 따라 달라진다'는 해석을 얻었다.
  5. 전처리 판단은 기록해 두어야 나중에 검증된다. '이상값 311건 중 229건이 99999라서 제외하지 않았다'는 결정은 지금 다시 보면 상한 절단의 흔적을 실제 값으로 취급한 것일 수 있다. 임계값과 값 분포를 캡처해 두었기에 지금 그 판단을 되짚을 수 있다.