딸바보 잡부
Chapter 4. 클러스터링, 장바구니
Chapter 5. 의사결정 나무 (Decision Tree), 회귀분석 (Regression), 신경망 분석 (Neural Network)
Chapter 6. 모형 평가, WoE
* 자, 고통의 시간입니다. 아주 아주 아주 아주 지루하고 지루한 과정입니다. 하지만, "Garbage in, garbage out"이라는 말처럼 이 부분을 소홀히 했다가는 처음부터 다시 해야 하는 지옥을 맛보게 됩니다.^^
* 전처리를 잘 수행하기 위해서는 전제하고 있는 주제에 대한 정의, 제약 사항에 대해 잘 이해하고 있는 것이 중요합니다. 잘 이해가 되지 않으면 이해가 될 때까지 질문하여 확인해야 하며, 이해하고 나서 이해한 것이 맞는지 다시 확인해야만 합니다. 이 역시 대충 넘어갔다가는 다 해놓고 다시 하는 경우가 발생하며 얼마 지나지 않아 지옥문이 활짝 열립니다.
- 통계 쪽에서 부르는 용어를 몰라 다소 어렵게 느끼는 경우가 있기는 한데, 대략적으로 용어를 대입해 보면 다음과 같습니다. Logical modeling / Physical modeling / Statistics 각각을 대응하였습니다.
(1) 엔티티(entity) = 테이블(table) = 데이터셋(dataset)
(2) 속성(attribute) = 열(column) = 변수(variable)
(3) 튜플(tuple) = 행(row) = 관측치(observation)
(4) Null = 결측치
- 변수의 유형은 사전에 준비하는 것도 아니고 딱히 정해져 있는 것은 아니지만, 데이터의 성격을 알아두는데 도움이 되기에 적습니다.
실질적으로는 Norminal/Interval 위주로 사용됩니다. (참조 링크)
(1) Norminal variables: 일정한 범주에 속하며, 순위/순서가 없다.
고객번호, 회원번호 등이 이에 속하며 주로 각 레코드를 구분하기 위해 사용됩니다.
(2) Ordinal variables: 일정한 범주에 속하며, 순위/순서가 있다.
점수, 등급 등이 이에 속하며 정렬의 기준이 되기도 합니다.
(3) Interval variables: 단위에 의해 변수 사이의 값이 일정하며, 덧셈은 가능하나 곱셈은 할 수 없다.
주로 가격, 수량 등이 이에 속합니다.
(4) Ratio variables: 단위에 의해 변수 사이의 값이 일정하며, 곱셈을 할 수 있다.
0 값이 의미를 가지며 키/몸무게 등이 여기에 속합니다.
- 샘플링은 원래의 데이터(母집단이라 부르기도 합니다.)가 커서(=건수가 많아서) 처리를 하는데 시간이 많이 소요될 경우 데이터의 일부를 추출하는 것입니다.
이 경우 일반적으로 1만 건 정도를 추출해서 보며, 추출할 때 원래의 데이터와 데이터의 분포가 비슷하도록 해야 합니다. 늘 그렇듯 정답은 없으나 변수별 평균, 정규분포 유사성, 그룹별 건수 등을 조사하여 대략 유사하게 구성하여 사용합니다.
- Random sampling
: 무작위 추출입니다. 특별한 기교는 없으며 분석 툴에서 제공하는 추출 함수를 사용합니다.
1만 건 정도를 추출한 후 추출된 데이터의 등급별 고객수가 어떤지를 살펴봅니다. 만약 추출된 고객이 등급별로 적당히(....) 고르게 나오면 사용하고, 그렇지 않고 예를 들어 G등급의 데이터가 없거나 너무 작으면(...) 다시 추출합니다. 모집단과 어느 정도 유사성을 가지는지 측정하는 방법으로는 IV(Information Value)라는 방법이 있는데, 이 값은 [Chapter 6. 모형 평가]에서 기술할 예정입니다.
- Stratified sampling
: 특정 기준별로 추출합니다.
1만 건을 추출한다고 가정했을 때, 각 등급별로 비율을 정해서 등급별로 random sampling을 수행한 후 추출된 결과를 합칩니다. 다만, 이 방법은 기준이 되는 항목을 선정할 때 이견(싸움)이 발생하기 쉬운 것이 함정입니다. 이유는? 정답이 없기 때문입니다.^^
- Over sampling
: target 건수가 부족한 경우 target, non-target을 구분하여 추출합니다.
위 그림의 등급별 고객 중 전월(지난달)에 상품을 구매한 고객을 1로, 구매하지 않은 고객은 0으로 값을 설정합니다. 이때, 구매한 고객이 10% 미만인 경우 구매한 고객에서 1,000건을 random sampling 하고 구매하지 않은 고객에서 9,000건을 random sampling 합니다. 그런 다음 추출한 데이터를 합칩니다.
- 엑셀의 피봇과 같습니다. 은근히 발생하는 상황으로 제공되는 함수가 없으면 미리 하나 만들어 두는 것을 권장합니다.
- 열(Column) -> 행(Row) 전환
: 데이터 가공이 아닌, 구문 자동화를 위해 종종 사용합니다. 특히, 열(column)이 가변적으로 움직일 경우 함수(function)로 미리 작성해 놓으면 상당히 편리합니다. 중간 단계 열(column)이름을 생성하여 데이터 처리를 하고, 그 열(column)을 제거하는 것도 종종 사용하는 방법입니다.
- 행(Row) -> 열(Column) 전환
: 코드 값에 의해 구분되어 있는 데이터를 각 코드 별 값을 분리할 때 사용합니다. 통계 엔진(모듈)들은 분석을 변수에 기반하므로, 데이터가 코드 값으로 분류되어 세로로 쌓여 있으면 안됩니다. 이때, 행열전환을 통해 데이터를 펼친 후 통계 엔진에 사용합니다.
위의 샘플링 설명에 있는 등급별 고객수를 예를 들어서 설명을 하자면 다음과 같습니다.
어떤 테이블이 고객번호, 고객등급, 구매금액, 구매일자로 구성되어 있으면 행렬전환을 이용해 구매일자, A등급 구매금액, B등급 구매금액, .... 와 같이 테이블을 재구성한 후 분석을 수행합니다.
- 분석 목적에 부합하지 않는 데이터를 제거합니다. 또한, 전체 데이터를 왜곡시키는 이상치(outlier)를 제거 또는 감소, 증폭 합니다. 데이터를 제거할 때는 반드시 제거 전과 후의 건수를 확인하여 의도한대로 제거되었는지 확인합니다.
- 변수를 추가하여 추적할 데이터에 꼬리표를 붙여 놓는 경우도 있습니다. 변수의 상태 변화를 추적하기 위해 사용합니다.
내용이 길어 다음 글에서 계속하겠습니다. 다음 글에서 다룰 내용은 아래와 같습니다.
4. 변환/치환 (Transposition)
- 기존 값 대체
- 그룹화 (Grouping)
- 그룹 함수 적용
- 결측 값 처리
5. 조합/결합 (Combination)
- 오른 쪽에 붙이기
- 아래에 붙이기: 중복 허용/제거
6. 자동화 (Automation)
- 부분 자동화
- 전체 자동화