본문 바로가기
Study Log/ADP

[ADP 필기 요약]_4과목 데이터 분석_③

by Maker_Potato 2026. 3. 3.

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가지

  1. Binning(분할 후 축소)
    • 처음엔 촘촘히(예: 50개 이하 구간) 나눈 뒤
    • 의미를 보면서 구간을 합쳐 “현업이 쓰기 좋은” 형태로 축소
  2. 의사결정나무 기반 구간화
    • 트리가 알아서 “잘 나뉘는 기준점”을 찾아줌
    • 장점: 결과(타겟) 기준으로 구간이 잡히기 쉬움

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 버려야 하는 오류값”을 구분

  1. 의미 있는 극단값(활용 가능)
    • 의도하지 않은 현상으로 입력된 값 or 의도된 극단값
    • VIP 고객의 초고액 구매, 특정 이벤트의 급증 등
  2. 나쁜 데이터(Bad Data, 제거 대상)
    • 잘못 입력된 값 or 의도하지 않은 현상으로 입력된 값이지만, 분석 목적에 부합되지 않는 값
    • 입력 오류, 단위 오류, 분석 목적에 부합하지 않는 비정상 값

이상값 인식 방법

  • ESD(Extreme Studentized Deviation) : 평균으로부터 3표준편차 떨어진 값
    • 정규분포라고 가정되는 데이터에서 평균에서 유난히 멀리 떨어진 값을 통계적으로 검정해서 찾아내는 방법
  • IQR 기준
    • Q1 - 1.5*IQR ~ Q3 + 1.5*IQR 을 벗어나는 데이터
  • (변형) 표준편차 기반 컷오프를 더 엄격/완화해서 쓰기도 함

이상값 처리 방법 2가지

  • Trimming(절단): 이상값 레코드 자체 삭제
  • Winsorizing(조정): 상/하한 값으로 “눌러서” 조정