1. 데이터 변경 및 요약
1-1. reshape로 데이터 마트 만들기: “요약변수/파생변수”가 성과를 만든다
✅ 데이터 마트(Data Mart)란?
- DW(데이터웨어하우스)와 사용자(분석/현업) 사이의 중간층
- 특정 주제/부서 중심으로 설계된 “작고 빠른 DW”
- DW에서 복제해 오기도 하고, 별도 수집 데이터가 들어가기도 함
- 결론: 데이터 마트를 어떻게 설계하느냐에 따라 분석효과가 크게 달라짐
✅ 데이터 마트에서 제일 중요한 두 종류의 변수
| 구분 | 요약변수 | 파생변수 |
| 정의 | 수집된 정보를 분석 목적에 맞게 종합한 기본 변수 (재활용성 높음) |
분석가가 조건/함수/논리로 의미를 부여해 만든 변수 (주관성 존재) |
| 특징 | 여러 모델이 공통으로 써서 재사용이 매우 좋음 | 타당성(논리) 없으면 “그럴듯한 변수”가 되기 쉬움 |
| 대표 예시 | 총 구매금액, 구매횟수, 구매여부, 기간별 금액/횟수, 채널별 구매금액, 단어빈도 등 | 구매 다양성, 주 구매매장/지역, 선호 가격대, 라이프스테이지, 휴면가망, 최적 통화시간 등 |
✅ 실무 감각으로 한 줄 정리
- 요약변수 = 기본 체력(모델/리포트 어디든 씀)
- 파생변수 = 공격 스킬(세분화/예측 정확도 올릴 때 강력)
1-2. reshape의 핵심: “melt로 길게 → cast로 넓게”
reshape(또는 reshape2 계열)는 데이터 구조를 바꾸면서 요약변수 생성을 쉽게 해줍니다.
- melt() : 데이터를 casting 하기 좋은 형태(긴 형태)로 변환
- 예: 고객ID/날짜/상품/금액처럼 “행이 늘어나는” 구조로 정리
- cast() : 원하는 기준으로 집계/변형하여 넓게 펼치기
- 예: 고객ID별 상품카테고리 구매금액 합계 → 카테고리별 컬럼 생성
포인트 : 시간/상품/채널 같은 차원(Dimension)을 붙여서 기간별/상품별/채널별 요약변수를 쏟아내기 좋다.
1-3. sqldf: “R에서 SQL로 생각하고 싶을 때” 최고의 편법
sqldf는 말 그대로 R 데이터프레임을 SQL로 조회하게 해주는 패키지
✅ R 코드 vs SQL 감각 매핑(자주 쓰는 것만)
- head(df) ↔ select * from df limit 6
- 조건필터
- R: df[df$col == "A", ]
- SQL: select * from df where col = 'A'
- like 검색
- SQL: where col like 'qn%' ✅ %가 와일드카드
- in 조건
- R: df[df$col %in% c("BF","HF"), ]
- SQL: where col in ('BF','HF')
- 행 결합
- R: rbind(df1, df2)
- SQL: select * from df1 union all select * from df2
1-4. plyr: split–apply–combine의 “정석 도구”
✅ plyr은 apply 계열을 확장해서,
- 데이터를 쪼개고(split)
- 함수 적용하고(apply)
- 다시 합치는(combine) 작업을 패턴화해주는 패키지
표만 보면 복잡해 보이지만, 핵심은 이름 규칙이에요.
- 앞 글자: 입력 데이터 타입(a=array, d=data.frame, l=list …)
- 뒤 글자: 출력 데이터 타입(ply 결과가 array/data.frame/list…)
예: ddply() = data.frame을 쪼개서 처리한 뒤 data.frame으로 반환
1-5. data.table: 대용량 데이터 핸들링
- 대용량 탐색/연산/병합에서 매우 빠름
- key로 인덱싱(색인) 걸고 처리
- 짧은 문장으로 grouping/ordering 가능
✅ data.table 감각 한 줄 요약
DT[i, j, by] : “어디서(i) 뭘 계산(j)해서 어떤 기준(by)으로 묶을래?”
2. 데이터 가공
2-1. Data Exploration
✅ 데이터 분석을 위해 구성된 데이터의 변수들의 상태를 파악
- head(), tail() : 앞/뒤 6개 레코드로 형태 확인
- summary() : 변수 분포/결측/이상치를 대략적으로 훑기
- 수치형: min/max/mean/사분위수
- 범주형: 값 종류/빈도
2-2. 변수 중요도(Variable Importance)
✅ 모델을 만들었을 때 어떤 변수가 결과에 영향력이 큰지를 확인하는 과정
- 불필요한 변수를 줄여서 성능/해석력을 개선
- “우리 비즈니스에서 중요한 레버가 뭔지” 설명할 근거가 됨
2-3. 변수 구간화
✅ 연속형 변수(나이/금액/횟수 등)를 구간화(binning) 해서 모델/스코어링
- 신용평가, 고객 세분화, 캠페인 타겟팅에서 매우 흔함
- 변수의 구간화를 위한 rule이 존재
- 구간은 보통 5개 내외
- 7개 이상부터는 해석/운영 난이도가 급상승
✅ 구간화 방법 2가지
- Binning(분할 후 축소)
- 처음엔 촘촘히(예: 50개 이하 구간) 나눈 뒤
- 의미를 보면서 구간을 합쳐 “현업이 쓰기 좋은” 형태로 축소
- 의사결정나무 기반 구간화
- 트리가 알아서 “잘 나뉘는 기준점”을 찾아줌
- 장점: 결과(타겟) 기준으로 구간이 잡히기 쉬움
3. 기초 분석 및 데이터 관리
3-1. EDA(탐색적 분석)
- summary()로 기본 통계량 확인
- 분포/이상치/결측 패턴을 먼저 파악
- EDA 결과가 좋아야 모델도 안정적
3-2. 결측값 인식: NA만 결측이 아니다
- NA, ., 999999, Unknown, Not Answer …
✅ “999999” 같은 값은 결측 처리 전에 진짜 값인지/코드값인지부터 정의가 필요
3-3. 결측값 처리 방법
✅ 단순 대치(Single Imputation)
- Complete Case: 결측 레코드 삭제(가장 단순하지만 표본 편향 위험)
- 평균/중앙값 대치
- 비조건부: 전체 평균/중앙값으로 대치
- 조건부: 회귀 등으로 조건을 반영해 대치
- 단순 확률 대치
- 평균대치법에서 추정량 표준 오차의 과소 추정문데를 보완한 방법
- Hot-deck, Nearest Neighbor 등(평균대치의 한계를 완화)
✅ 다중 대치(Multiple Imputation)
- 단순 대치를 여러 번 수행해 여러 개의 가상 데이터셋 생성 후 추정
- 통계적으로 더 안정적인 결과를 노릴 때 사용
3-4. R 결측 처리에서 자주 쓰는 함수들
- complete.cases() : 결측 있으면 FALSE, 없으면 TRUE (레코드 단위 체크)
- is.na() : 결측값이 있으면 True 없으면 False로 반환
✅ 패키지 기반 대치
- 중앙값/최빈값 대치, kNN 대치 같은 방식이 있음
- 랜덤포레스트 등 일부 알고리즘은 결측이 있으면 에러가 나기도 해서, 대치 후 적용이 필요할 때가 많음
3-5. 이상값(Outlier): “쓸 수 있는 극단값 vs 버려야 하는 오류값”을 구분
- 의미 있는 극단값(활용 가능)
- 의도하지 않은 현상으로 입력된 값 or 의도된 극단값
- VIP 고객의 초고액 구매, 특정 이벤트의 급증 등
- 나쁜 데이터(Bad Data, 제거 대상)
- 잘못 입력된 값 or 의도하지 않은 현상으로 입력된 값이지만, 분석 목적에 부합되지 않는 값
- 입력 오류, 단위 오류, 분석 목적에 부합하지 않는 비정상 값
✅ 이상값 인식 방법
- ESD(Extreme Studentized Deviation) : 평균으로부터 3표준편차 떨어진 값
- 정규분포라고 가정되는 데이터에서 평균에서 유난히 멀리 떨어진 값을 통계적으로 검정해서 찾아내는 방법
- IQR 기준
- Q1 - 1.5*IQR ~ Q3 + 1.5*IQR 을 벗어나는 데이터
- (변형) 표준편차 기반 컷오프를 더 엄격/완화해서 쓰기도 함
✅ 이상값 처리 방법 2가지
- Trimming(절단): 이상값 레코드 자체 삭제
- Winsorizing(조정): 상/하한 값으로 “눌러서” 조정
'Study Log > ADP' 카테고리의 다른 글
| [ADP 필기 요약]_4과목 데이터 분석_⑤ (0) | 2026.03.13 |
|---|---|
| [ADP 필기 요약]_4과목 데이터 분석_④ (0) | 2026.03.10 |
| [ADP 필기 요약]_4과목 데이터 분석_② (0) | 2026.03.02 |
| [ADP 필기 요약]_4과목 데이터 분석_① (0) | 2026.02.26 |
| [ADP 필기 요약]_3과목 데이터 분석 기획_③ (0) | 2026.02.23 |