← 강의 목록

ADsP

8편 - ADsP 과목3: 데이터 분석

ADsP 과목3: 데이터 분석


제1장. 통계학 기초


1.1 기술통계 (Descriptive Statistics)

1.1.1 데이터의 종류

(1) 척도의 종류

척도설명예시연산 가능
명목 척도 (Nominal)단순 분류. 순서 의미 없음성별(남/여), 혈액형(A/B/O/AB)빈도, 최빈값
순서 척도 (Ordinal)순서 의미 있음. 간격은 불균등학점(A/B/C), 만족도(상/중/하)+ 중앙값
등간 척도 (Interval)순서 + 균등한 간격. 절대 영점 없음온도(℃), 지능지수(IQ)+ 평균, 표준편차
비율 척도 (Ratio)순서 + 균등 간격 + 절대 영점 있음키, 몸무게, 나이, 소득+ 비율 계산

시험 핵심: "명순등비"로 암기! 명목 → 순서 → 등간 → 비율 순으로 측정 수준이 높아진다. 등간 척도는 0이 "없음"을 의미하지 않고(0℃ ≠ 온도 없음), 비율 척도는 0이 "없음"을 의미한다(0kg = 무게 없음).

(2) 연속형 vs 이산형

구분설명예시
연속형 (Continuous)연속적인 실수 값키, 몸무게, 온도
이산형 (Discrete)셀 수 있는 정수 값학생 수, 자동차 수

1.1.2 중심 경향 측도 (대표값)

측도설명특징
평균 (Mean)모든 값의 합 / 개수이상값에 민감
중앙값 (Median)정렬 후 가운데 값이상값에 강건(Robust)
최빈값 (Mode)가장 빈번한 값명목 척도에도 사용 가능
절사평균 (Trimmed Mean)상하위 일정 비율을 제거한 후 평균이상값 영향 완화
# R 코드
x <- c(10, 20, 30, 40, 100)  # 100은 이상값

mean(x)       # 평균: 40
median(x)     # 중앙값: 30
mean(x, trim = 0.2)  # 20% 절사평균: 30

시험 핵심: 이상값(Outlier)이 있을 때 평균보다 중앙값이 더 적합한 대표값이다.

1.1.3 산포도 (Dispersion)

측도공식설명
분산 (Variance)Σ(xᵢ - x̄)² / (n-1)평균으로부터 편차 제곱의 평균 (표본: n-1)
표준편차 (Standard Deviation)√분산분산의 제곱근. 원래 단위와 동일
범위 (Range)최대값 - 최소값가장 간단한 산포 측도
사분위수 범위 (IQR)Q3 - Q1이상값에 강건한 산포 측도
변동계수 (CV)(표준편차/평균) × 100단위가 다른 데이터의 산포 비교
# R 코드
x <- c(10, 20, 30, 40, 50)

var(x)     # 분산: 250
sd(x)      # 표준편차: 15.81
range(x)   # 범위: 10, 50
IQR(x)     # 사분위수 범위: 20

1.1.4 사분위수 (Quartile)

데이터를 정렬 후 4등분:
최소값 ── Q1(25%) ── Q2(50%=중앙값) ── Q3(75%) ── 최대값

IQR = Q3 - Q1

이상값 기준:
  하한: Q1 - 1.5 × IQR 미만
  상한: Q3 + 1.5 × IQR 초과
# R 코드: 사분위수와 boxplot
x <- c(1, 5, 10, 15, 20, 25, 30, 35, 100)
quantile(x)       # 0%, 25%, 50%, 75%, 100%
boxplot(x)        # 상자 그림 (이상값 시각화)

summary(x)        # 최솟값, Q1, 중앙값, 평균, Q3, 최댓값 한 번에

1.1.5 분포의 형태

측도설명해석
왜도 (Skewness)분포의 비대칭 정도0: 대칭, 양수: 오른쪽 꼬리, 음수: 왼쪽 꼬리
첨도 (Kurtosis)분포의 뾰족한 정도0(정규분포 기준): 보통, 양수: 뾰족, 음수: 납작
오른쪽 꼬리 (양의 왜도):  평균 > 중앙값 > 최빈값
대칭 (왜도 = 0):         평균 = 중앙값 = 최빈값
왼쪽 꼬리 (음의 왜도):    평균 < 중앙값 < 최빈값

시험 핵심: 오른쪽으로 꼬리가 긴 분포(양의 왜도)에서는 평균 > 중앙값이다. 소득분포가 대표적 예시이다.


1.2 확률과 확률분포

1.2.1 확률의 기본 개념

용어설명
표본공간 (S)모든 가능한 결과의 집합
사건 (Event)표본공간의 부분집합
확률0 ≤ P(A) ≤ 1, P(S) = 1

확률의 덧셈 법칙: P(A ∪ B) = P(A) + P(B) - P(A ∩ B)

조건부 확률: P(A|B) = P(A ∩ B) / P(B)

독립 사건: P(A ∩ B) = P(A) × P(B) (독립일 때)

베이즈 정리: P(A|B) = P(B|A) × P(A) / P(B)

시험 핵심: 베이즈 정리는 사전확률 P(A)를 관측 후 사후확률 P(A|B)로 갱신하는 공식이다.

1.2.2 이산형 확률분포

(1) 이항분포 (Binomial Distribution)

n번의 독립 시행에서 성공 확률이 p일 때, 성공 횟수 X의 분포

  • X ~ B(n, p)
  • 평균: np, 분산: np(1-p)
# 동전 10번 던져서 앞면 나올 확률
# P(X = 6) = ?
dbinom(6, size = 10, prob = 0.5)  # 정확히 6번: 0.2050781

# P(X <= 6) = ? (누적)
pbinom(6, size = 10, prob = 0.5)  # 6번 이하: 0.828125

(2) 포아송분포 (Poisson Distribution)

단위 시간/공간에서 사건 발생 횟수의 분포

  • X ~ Poisson(λ)
  • 평균: λ, 분산: λ (평균 = 분산이 특징!)
# 시간당 평균 3건의 전화가 올 때, 정확히 5건 올 확률
dpois(5, lambda = 3)  # 0.1008188

시험 핵심: 포아송분포는 평균 = 분산 = λ이다. 이 특징은 자주 출제된다.

1.2.3 연속형 확률분포

(1) 정규분포 (Normal Distribution)

가장 중요한 연속형 확률분포. 좌우 대칭의 종 모양(Bell Curve)이다.

  • X ~ N(μ, σ²)
  • 평균(μ)을 중심으로 좌우 대칭
  • 68-95-99.7 법칙: μ±1σ(68.27%), μ±2σ(95.45%), μ±3σ(99.73%)
# 표준정규분포 N(0,1)
pnorm(1.96)           # P(Z ≤ 1.96) = 0.975
pnorm(1.96) - pnorm(-1.96)  # P(-1.96 ≤ Z ≤ 1.96) = 0.95
qnorm(0.975)          # 상위 2.5% 기준점: 1.96

(2) 표준정규분포

Z = (X - μ) / σ 로 표준화하면 N(0, 1)이 된다.

(3) t분포

정규분포와 유사하지만 꼬리가 더 두꺼운 분포이다. 표본 크기가 작을 때(n < 30) 사용한다.

  • 자유도(df)가 클수록 정규분포에 가까워짐
  • 자유도 = n - 1

(4) 카이제곱분포 (χ² Distribution)

양수 값만 취하며, 적합도 검정이나 독립성 검정에 사용된다.

(5) F분포

두 집단의 분산비를 검정할 때 사용한다. 분산분석(ANOVA)의 기초이다.


1.3 추론통계 (Inferential Statistics)

1.3.1 모집단과 표본

용어설명
모집단 (Population)연구 대상이 되는 전체 집합
표본 (Sample)모집단에서 추출된 일부
모수 (Parameter)모집단의 특성값 (μ, σ)
통계량 (Statistic)표본의 특성값 (x̄, s)
표본 오차표본 통계량과 모수 간의 차이

1.3.2 표본추출 방법

방법설명
단순 랜덤 추출모집단에서 무작위로 동일한 확률로 추출
층화 추출 (Stratified)모집단을 동질적 계층으로 나눈 후 각 층에서 추출
군집 추출 (Cluster)모집단을 군집으로 나눈 후 일부 군집 전체를 추출
체계적 추출 (Systematic)일정 간격으로 추출 (매 k번째)

시험 핵심: 층화 추출은 "각 층에서 일부를 추출", 군집 추출은 "일부 군집 전체를 추출"이다. 혼동하지 말 것!

1.3.3 중심극한정리 (CLT: Central Limit Theorem)

모집단의 분포에 관계없이, 표본 크기 n이 충분히 크면(보통 n ≥ 30), 표본평균의 분포는 정규분포에 근사한다.

  • 표본평균의 기대값: E(X̄) = μ
  • 표본평균의 표준오차: SE = σ / √n

시험 핵심: 중심극한정리는 "표본 크기가 충분히 크면 표본평균은 정규분포를 따른다"는 것이 핵심이다. 모집단이 정규분포가 아니어도 성립한다!

1.3.4 신뢰구간 (Confidence Interval)

모수가 포함될 것으로 기대되는 구간이다.

모평균의 95% 신뢰구간:
X̄ ± 1.96 × (σ/√n)    (모표준편차 σ를 알 때)
X̄ ± t(α/2, n-1) × (s/√n)  (모표준편차를 모를 때, t분포 사용)
# R에서 신뢰구간 구하기
x <- c(23, 25, 28, 30, 32, 35, 38, 40)
t.test(x, conf.level = 0.95)  # 95% 신뢰구간 출력

시험 핵심: "95% 신뢰구간"이란 같은 방법으로 100번 구간을 구하면 약 95번은 모수를 포함한다는 의미이다. 신뢰수준이 높아지면 구간이 넓어진다.


1.4 가설검정 (Hypothesis Testing)

1.4.1 가설검정의 개념

용어설명
귀무가설 (H₀)기존의 주장 또는 "차이가 없다"는 가설. 검정 대상
대립가설 (H₁ 또는 Hₐ)연구자가 증명하려는 가설. "차이가 있다"
유의수준 (α)귀무가설이 참인데 기각할 확률의 허용 한계 (보통 0.05)
p-value귀무가설이 참이라는 전제 하에 관측 결과가 나올 확률
검정통계량검정에 사용되는 통계값 (z, t, χ², F 등)

1.4.2 가설검정의 절차

1. 가설 설정 (H₀, H₁)
2. 유의수준 설정 (α = 0.05)
3. 검정통계량 계산
4. p-value 계산 또는 기각역 판단
5. 결론 도출 (H₀ 기각 또는 채택)

판단 기준:

  • p-value < α → H₀ 기각 (통계적으로 유의하다)
  • p-value ≥ α → H₀ 채택 (유의하지 않다)

1.4.3 오류의 종류

오류설명확률
제1종 오류 (α 오류)H₀이 참인데 기각 (거짓 경보)α (유의수준)
제2종 오류 (β 오류)H₀이 거짓인데 채택 (놓침)β
검정력 (Power)H₀이 거짓일 때 올바르게 기각할 확률1 - β

시험 핵심: 제1종 오류는 "없는데 있다고 함", 제2종 오류는 "있는데 없다고 함"이다. 유의수준 α를 낮추면 제1종 오류는 줄어들지만 제2종 오류는 증가한다.

1.4.4 주요 검정 방법

검정목적사용 조건
단일표본 t검정모평균이 특정 값과 같은지하나의 집단, 정규성 가정
독립표본 t검정두 집단의 평균 차이 검정두 독립 집단, 정규성 + 등분산
대응표본 t검정짝지어진 두 집단의 평균 차이짝지어진(Before/After) 자료
카이제곱 검정범주형 변수의 독립성/적합도빈도 자료
ANOVA (분산분석)3개 이상 집단의 평균 차이여러 집단, 정규성 + 등분산
# 단일표본 t검정: 평균이 50과 다른가?
x <- c(48, 52, 55, 47, 51, 53, 49, 50)
t.test(x, mu = 50)

# 독립표본 t검정: 두 그룹의 평균이 다른가?
group1 <- c(23, 25, 28, 30, 32)
group2 <- c(30, 33, 35, 38, 40)
t.test(group1, group2)

# 대응표본 t검정: Before vs After
before <- c(200, 180, 210, 190, 220)
after  <- c(180, 170, 195, 175, 200)
t.test(before, after, paired = TRUE)

1.5 상관분석과 회귀분석

1.5.1 상관분석 (Correlation Analysis)

두 변수 간의 선형적 관련성의 강도와 방향을 측정한다.

피어슨 상관계수 (r)

  • 범위: -1 ≤ r ≤ 1
  • r = 1: 완전 양의 상관
  • r = -1: 완전 음의 상관
  • r = 0: 선형 관계 없음 (비선형 관계는 있을 수 있음!)

| |r| 값 | 해석 | |---------|------| | 0.0 ~ 0.2 | 거의 없음 | | 0.2 ~ 0.4 | 약한 상관 | | 0.4 ~ 0.6 | 보통 상관 | | 0.6 ~ 0.8 | 강한 상관 | | 0.8 ~ 1.0 | 매우 강한 상관 |

# 상관분석
x <- c(10, 20, 30, 40, 50)
y <- c(15, 25, 32, 42, 48)

cor(x, y)                  # 상관계수: 0.998
cor.test(x, y)             # 상관계수 + 유의성 검정

# 상관 행렬
data <- data.frame(= c(170,165,180,175,160),
                   몸무게 = c(70,60,80,75,55),
                   나이 = c(30,25,35,28,22))
cor(data)                  # 상관 행렬

시험 핵심: 상관관계는 인과관계가 아니다! 상관계수가 높아도 원인-결과 관계를 의미하지 않는다.

1.5.2 단순 회귀분석 (Simple Linear Regression)

독립변수(X) 하나로 종속변수(Y)를 예측하는 모델이다.

Y = β₀ + β₁X + ε

β₀: 절편 (Y축 교차점)
β₁: 기울기 (X가 1 증가할 때 Y의 변화량)
ε: 오차항
# 단순 회귀분석
x <- c(1, 2, 3, 4, 5)
y <- c(2.1, 3.9, 6.2, 7.8, 10.1)

model <- lm(y ~ x)      # 회귀모델 적합
summary(model)           # 결과 확인

# 주요 출력:
# Coefficients:
#             Estimate  Std. Error  t value  Pr(>|t|)
# (Intercept)  -0.02      0.31      -0.06    0.953     ← β₀
# x             2.02      0.09      22.44    0.000 *** ← β₁
#
# Multiple R-squared: 0.9941  ← 결정계수 R²
# F-statistic: 503.6, p-value: 2.04e-04

1.5.3 다중 회귀분석 (Multiple Linear Regression)

독립변수가 2개 이상인 회귀분석이다.

Y = β₀ + β₁X₁ + β₂X₂ + ... + βₚXₚ + ε
# 다중 회귀분석
model <- lm(mpg ~ wt + hp + cyl, data = mtcars)
summary(model)

# 변수 선택법
# 전진선택법 (Forward): 변수를 하나씩 추가
# 후진제거법 (Backward): 전체에서 하나씩 제거
# 단계적 방법 (Stepwise): 추가/제거 반복
step(model, direction = "both")  # Stepwise

1.5.4 회귀분석의 주요 지표

지표설명범위
R² (결정계수)모델이 데이터를 설명하는 비율0 ~ 1 (1에 가까울수록 좋음)
수정된 R² (Adjusted R²)변수 수를 고려하여 보정한 R²다중 회귀에서 더 적합
F 통계량회귀 모델 전체의 유의성 검정p-value < 0.05이면 유의
t 통계량각 회귀계수의 유의성 검정p-value < 0.05이면 유의
잔차 (Residual)실제값 - 예측값0에 가까울수록 좋음

시험 핵심: R²가 높다고 항상 좋은 모델은 아니다. 변수가 많으면 R²는 항상 증가하므로 수정된 R²(Adjusted R²)를 확인해야 한다.

1.5.5 회귀분석의 가정

가정설명위반 시
선형성X와 Y의 관계가 선형비선형 변환 필요
독립성잔차가 서로 독립더빈-왓슨 검정으로 확인
등분산성잔차의 분산이 일정가중최소제곱법 등
정규성잔차가 정규분포를 따름샤피로-윌크 검정으로 확인
다중공선성 없음독립변수 간 높은 상관 없음VIF 확인 (VIF > 10이면 문제)
# 회귀 진단
model <- lm(mpg ~ wt + hp, data = mtcars)

# 잔차 정규성 검정
shapiro.test(resid(model))

# 다중공선성 확인 (car 패키지)
# install.packages("car")
library(car)
vif(model)  # VIF > 10이면 다중공선성 의심

# 더빈-왓슨 검정 (자기상관 확인)
# durbinWatsonTest(model)

1.6 분산분석 (ANOVA)

1.6.1 ANOVA란?

3개 이상 집단의 평균 차이를 검정하는 방법이다. t검정의 확장이다.

유형설명
일원분산분석독립변수 1개 (예: 3개 교수법의 성적 차이)
이원분산분석독립변수 2개 (예: 교수법 × 성별의 성적 차이)
# 일원분산분석
group <- factor(c(rep("A",5), rep("B",5), rep("C",5)))
score <- c(85,90,88,92,87, 70,75,72,68,73, 90,95,88,92,96)

result <- aov(score ~ group)
summary(result)

# p-value < 0.05이면 "적어도 하나의 집단 평균이 다르다"

# 사후검정 (어떤 집단이 다른지)
TukeyHSD(result)

시험 핵심: ANOVA에서 귀무가설은 "모든 집단의 평균이 같다"이다. 기각되면 "적어도 하나의 집단 평균이 다르다"는 것이지, 어떤 집단이 다른지는 사후검정이 필요하다.


제2장. 데이터마이닝


2.1 데이터마이닝 개요

2.1.1 데이터마이닝이란?

대량의 데이터로부터 숨겨진 패턴, 관계, 규칙 등 유용한 지식을 자동적으로 발견하는 과정이다.

2.1.2 데이터마이닝 기법 분류

분류기법목적
지도학습 (Supervised)분류, 회귀정답(레이블)이 있는 데이터로 학습
비지도학습 (Unsupervised)군집, 연관분석정답 없이 데이터의 구조를 발견
과제 유형종속변수목적대표 기법
분류 (Classification)범주형범주 예측로지스틱, 의사결정나무, SVM, kNN
회귀 (Regression)연속형수치 예측선형회귀, 릿지, 라쏘
군집 (Clustering)없음유사 그룹화K-means, 계층적 군집
연관 (Association)없음항목 간 관계 발견Apriori

2.2 분류 (Classification)

2.2.1 로지스틱 회귀 (Logistic Regression)

종속변수가 0/1(이진)인 분류 문제에 사용한다.

P(Y=1|X) = 1 / (1 + e^-(β₀ + β₁X))   (시그모이드 함수)
  • 결과값이 0~1 사이의 확률로 출력
  • 확률이 0.5 이상이면 1, 미만이면 0으로 분류 (임계값 조정 가능)
# 로지스틱 회귀
model <- glm(am ~ wt + hp, data = mtcars, family = binomial)
summary(model)

# 예측
pred_prob <- predict(model, type = "response")  # 확률
pred_class <- ifelse(pred_prob >= 0.5, 1, 0)    # 분류

2.2.2 의사결정나무 (Decision Tree)

조건에 따라 데이터를 분할하여 트리 형태로 분류하는 기법이다.

          [소득 > 5000?]
          /              \
       예                 아니오
   [나이 > 30?]          → 미구매
   /          \
 예          아니오
→ 구매       → 미구매
알고리즘분할 기준특징
CART지니 지수 (Gini Index)이진 분할만 가능
C4.5/C5.0정보 이득 (Information Gain) / 엔트로피다중 분할 가능
CHAID카이제곱 검정범주형 변수에 적합
# 의사결정나무 (rpart)
library(rpart)
library(rpart.plot)

model <- rpart(Species ~ ., data = iris, method = "class")
rpart.plot(model)  # 트리 시각화

# 예측
pred <- predict(model, iris, type = "class")

의사결정나무의 장단점:

장점단점
해석이 쉬움 (화이트박스)과적합(Overfitting) 경향
비선형 관계도 포착 가능작은 데이터 변화에 민감
전처리가 거의 불필요연속형 변수 처리가 비효율적

2.2.3 앙상블 기법

여러 모델을 결합하여 단일 모델보다 더 좋은 성능을 얻는 기법이다.

기법설명대표 모델
배깅 (Bagging)부트스트랩 샘플링으로 여러 모델 학습 후 투표/평균랜덤 포레스트
부스팅 (Boosting)이전 모델의 오류에 가중치를 부여하며 순차적 학습GBM, XGBoost, AdaBoost

랜덤 포레스트 (Random Forest)

  • 여러 의사결정나무의 집합 (배깅 기반)
  • 각 나무 학습 시 변수도 랜덤하게 선택
  • 과적합 방지에 효과적
# 랜덤 포레스트
library(randomForest)
model <- randomForest(Species ~ ., data = iris, ntree = 500)
print(model)
importance(model)  # 변수 중요도

2.2.4 kNN (k-Nearest Neighbors)

가장 가까운 k개의 이웃을 찾아 다수결 투표로 분류하는 기법이다.

  • 거리 측정: 유클리드 거리, 맨하탄 거리 등
  • k가 작으면 과적합, k가 크면 과소적합
  • 데이터 정규화(스케일링)가 필수!

2.2.5 SVM (Support Vector Machine)

클래스 간 마진(Margin)을 최대화하는 결정 경계(Hyperplane)를 찾는 기법이다.

  • 고차원에서도 효과적
  • 커널 트릭으로 비선형 분류 가능 (RBF, Polynomial 커널 등)

2.2.6 나이브 베이즈 (Naive Bayes)

베이즈 정리를 기반으로 분류하며, 변수 간 독립을 가정한다.

  • 텍스트 분류(스팸 필터 등)에 널리 사용
  • 학습 속도가 빠름
  • "나이브"한 이유: 변수 간 독립이라는 강한 가정

2.2.7 분류 모델의 평가

(1) 혼동 행렬 (Confusion Matrix)

예측: Positive예측: Negative
실제: PositiveTP (True Positive)FN (False Negative)
실제: NegativeFP (False Positive)TN (True Negative)

(2) 평가 지표

지표공식설명
정확도 (Accuracy)(TP+TN) / 전체전체 중 올바르게 분류한 비율
정밀도 (Precision)TP / (TP+FP)Positive 예측 중 실제 Positive 비율
재현율 (Recall, 민감도)TP / (TP+FN)실제 Positive 중 올바르게 예측한 비율
특이도 (Specificity)TN / (TN+FP)실제 Negative 중 올바르게 예측한 비율
F1 Score2×(정밀도×재현율)/(정밀도+재현율)정밀도와 재현율의 조화평균

시험 핵심: 정밀도는 "예측의 정확성", 재현율은 "빠짐없이 찾아냄"에 초점. 암 진단 같은 경우 재현율이 더 중요하고(놓치면 안 되므로), 스팸 필터는 정밀도가 더 중요하다(정상 메일을 스팸으로 처리하면 안 되므로).

(3) ROC 곡선과 AUC

  • ROC 곡선: FPR(1-특이도) vs TPR(재현율) 그래프
  • AUC: ROC 곡선 아래 면적 (0.5~1, 1에 가까울수록 좋음)
  • AUC = 0.5: 랜덤 수준, AUC = 1: 완벽한 분류
# 혼동 행렬
actual <- factor(c(1,1,0,1,0,0,1,0,1,0))
predicted <- factor(c(1,0,0,1,0,1,1,0,1,0))
table(actual, predicted)

# 정확도 계산
sum(actual == predicted) / length(actual)

2.3 군집분석 (Clustering)

2.3.1 K-means 군집분석

항목설명
원리k개의 중심점(centroid)을 잡고, 가장 가까운 중심에 데이터를 할당 → 중심 재계산 → 반복
장점간단하고 빠름, 대규모 데이터에 적합
단점k를 사전에 지정해야 함, 초기값에 민감, 구형 군집만 잘 찾음

K-means 알고리즘 절차:

1. k개의 초기 중심점을 랜덤하게 선택
2. 각 데이터를 가장 가까운 중심에 할당
3. 각 군집의 새로운 중심 계산 (평균)
4. 중심이 변하지 않을 때까지 2~3 반복
# K-means
data <- iris[, 1:4]  # 숫자형 변수만
result <- kmeans(data, centers = 3, nstart = 20)

result$cluster     # 각 데이터의 군집 번호
result$centers     # 각 군집의 중심
result$size        # 각 군집의 크기

# 시각화
plot(data[,1:2], col = result$cluster, pch = 19)
points(result$centers[,1:2], col = 1:3, pch = 8, cex = 3)

2.3.2 계층적 군집분석 (Hierarchical Clustering)

방식설명
병합적 (Agglomerative)각 개체를 하나의 군집으로 시작 → 가장 가까운 군집끼리 병합 (Bottom-Up)
분리적 (Divisive)전체를 하나의 군집으로 시작 → 나누어가며 분리 (Top-Down)

거리 측정 방법 (연결법):

방법설명
단일 연결법 (Single)두 군집 간 가장 가까운 거리
완전 연결법 (Complete)두 군집 간 가장 먼 거리
평균 연결법 (Average)모든 쌍의 거리 평균
와드법 (Ward)군집 내 분산 증가량을 최소화
# 계층적 군집분석
d <- dist(iris[,1:4])                      # 거리 행렬
hc <- hclust(d, method = "ward.D2")        # 와드법
plot(hc)                                    # 덴드로그램
rect.hclust(hc, k = 3)                     # 3개 군집 표시
groups <- cutree(hc, k = 3)                # 군집 할당

시험 핵심: K-means는 k를 미리 정해야 하고 계층적 군집은 덴드로그램(Dendrogram)을 보고 결정할 수 있다.


2.4 연관분석 (Association Analysis)

2.4.1 연관규칙이란?

항목 간의 연관 관계를 규칙(Rule) 형태로 발견하는 기법이다. 장바구니 분석이 대표적이다.

예: {맥주} → {기저귀} (맥주를 사면 기저귀도 산다)

2.4.2 연관규칙의 3대 지표 (★ 매우 중요)

지표공식설명
지지도 (Support)P(A ∩ B)A와 B가 동시에 발생하는 비율
신뢰도 (Confidence)P(B|A) = P(A∩B)/P(A)A를 구매한 사람 중 B도 구매한 비율
향상도 (Lift)P(B|A)/P(B) = 신뢰도/P(B)우연 대비 실제 연관의 강도

향상도 해석:

  • Lift = 1: A와 B는 독립 (연관 없음)
  • Lift > 1: 양의 연관 (A를 사면 B도 살 확률 증가)
  • Lift < 1: 음의 연관 (A를 사면 B를 살 확률 감소)

예시 계산:

전체 거래 1000건 중:

  • 맥주 포함: 400건
  • 기저귀 포함: 300건
  • 맥주+기저귀 포함: 200건
지지도 = 200/1000 = 0.2 (20%)
신뢰도 = 200/400 = 0.5 (50%)  ← 맥주 산 사람 중 50%가 기저귀도 구매
향상도 = 0.5 / 0.3 = 1.67     ← 우연보다 1.67배 더 연관

시험 핵심: 지지도·신뢰도·향상도의 공식과 해석을 반드시 숙지! 특히 향상도 = 1이면 독립이라는 점이 자주 출제된다.

2.4.3 Apriori 알고리즘

최소 지지도(Minimum Support)를 만족하는 빈발 항목집합(Frequent Itemset)을 찾은 후, 최소 신뢰도를 만족하는 연관규칙을 생성하는 알고리즘이다.

# 연관분석 (arules 패키지)
# install.packages("arules")
library(arules)

# 트랜잭션 데이터 예시
data("Groceries")
rules <- apriori(Groceries,
                 parameter = list(support = 0.01,
                                  confidence = 0.3))
inspect(sort(rules, by = "lift")[1:10])  # 향상도 기준 상위 10개

제3장. R 프로그래밍


3.1 R 기초

3.1.1 R이란?

통계 분석과 데이터 시각화에 특화된 오픈소스 프로그래밍 언어이다.

3.1.2 데이터 타입

타입설명예시
numeric숫자 (실수)3.14, 100
integer정수1L, 2L
character문자열"Hello", 'World'
logical논리값TRUE, FALSE
factor범주형factor(c("A","B","C"))

3.1.3 데이터 구조

구조설명생성
벡터 (Vector)같은 타입의 1차원 배열c(1, 2, 3)
행렬 (Matrix)같은 타입의 2차원 배열matrix(1:6, nrow=2)
데이터프레임 (Data Frame)다른 타입 가능한 2차원 표data.frame(a=1:3, b=c("x","y","z"))
리스트 (List)다른 타입·구조를 담을 수 있는 컨테이너list(a=1, b="hello", c=TRUE)
# 벡터
x <- c(10, 20, 30, 40, 50)
x[1]        # 10 (R은 1부터 시작!)
x[2:4]      # 20, 30, 40
length(x)   # 5

# 데이터프레임
df <- data.frame(
    이름 = c("홍길동", "김철수", "이영희"),
    나이 = c(25, 30, 28),
    성별 = c("M", "M", "F")
)
df$이름       # 칼럼 접근
df[1, ]       # 첫 번째 행
df[, 2]       # 두 번째 칼럼

3.1.4 자주 출제되는 R 함수

함수설명예시
str(x)데이터 구조 확인str(iris)
summary(x)요약 통계량summary(iris)
head(x, n)처음 n행head(iris, 10)
tail(x, n)마지막 n행tail(iris, 5)
dim(x)행수, 열수dim(iris) → 150 4
nrow(x), ncol(x)행수/열수nrow(iris) → 150
names(x)칼럼명names(iris)
class(x)데이터 타입class(iris$Species)
table(x)빈도표table(iris$Species)
which.max(x)최대값 인덱스which.max(c(3,1,4,1,5)) → 5
paste()문자열 결합paste("A", "B") → "A B"
subset()조건부 추출subset(iris, Species=="setosa")
apply()행/열 단위 함수 적용apply(matrix, 2, mean)
sapply()벡터/리스트에 함수 적용sapply(iris[,1:4], mean)
ifelse()조건부 값 반환ifelse(x > 0, "양수", "음수")
is.na()NA 여부 확인is.na(x)
na.rm = TRUENA 제외 계산mean(x, na.rm = TRUE)
complete.cases()NA 없는 행 확인complete.cases(df)
# 시험에 자주 나오는 패턴
iris_summary <- summary(iris)   # 각 칼럼의 요약 통계

str(iris)        # 구조 확인
# 'data.frame': 150 obs. of 5 variables:
#  $ Sepal.Length: num  5.1 4.9 4.7 ...
#  $ Species     : Factor w/ 3 levels ...

head(iris, 3)    # 상위 3행
dim(iris)        # 150  5
table(iris$Species)  # setosa:50, versicolor:50, virginica:50

3.2 데이터 전처리

3.2.1 결측치 처리

# 결측치 확인
sum(is.na(df))              # 전체 NA 개수
colSums(is.na(df))          # 칼럼별 NA 개수

# 결측치 제거
df_clean <- na.omit(df)     # NA가 있는 행 전체 제거

# 결측치 대체
df$age[is.na(df$age)] <- mean(df$age, na.rm = TRUE)  # 평균으로 대체

3.2.2 이상값 처리

# 상자 그림으로 이상값 확인
boxplot(x)$out              # 이상값 목록

# IQR 방법
Q1 <- quantile(x, 0.25)
Q3 <- quantile(x, 0.75)
IQR_val <- Q3 - Q1
lower <- Q1 - 1.5 * IQR_val
upper <- Q3 + 1.5 * IQR_val
x_clean <- x[x >= lower & x <= upper]

3.2.3 데이터 변환

# 정규화 (Min-Max Scaling): 0~1 범위로 변환
normalize <- function(x) (x - min(x)) / (max(x) - min(x))
df_norm <- sapply(df[,1:4], normalize)

# 표준화 (Z-score): 평균=0, 표준편차=1
df_scaled <- scale(df[,1:4])

# 로그 변환 (오른쪽 꼬리 분포에 유효)
x_log <- log(x)

3.3 데이터 시각화

3.3.1 기본 그래프

함수그래프 유형용도
plot(x, y)산점도두 변수의 관계
hist(x)히스토그램연속형 변수의 분포
barplot(x)막대 그래프범주별 빈도/값 비교
boxplot(x)상자 그림분포와 이상값 파악
pie(x)원형 그래프비율 표시
# 산점도
plot(iris$Sepal.Length, iris$Sepal.Width,
     main = "Sepal Length vs Width",
     xlab = "Length", ylab = "Width",
     col = iris$Species, pch = 19)

# 히스토그램
hist(iris$Sepal.Length, breaks = 20,
     main = "Sepal Length Distribution",
     col = "lightblue")

# 상자 그림
boxplot(Sepal.Length ~ Species, data = iris,
        main = "Species별 Sepal Length",
        col = c("red", "green", "blue"))

3.3.2 ggplot2 (자주 출제!)

library(ggplot2)

# 산점도
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
    geom_point() +
    labs(title = "Sepal Dimensions")

# 히스토그램
ggplot(iris, aes(x = Sepal.Length, fill = Species)) +
    geom_histogram(bins = 20, alpha = 0.7)

# 상자 그림
ggplot(iris, aes(x = Species, y = Sepal.Length, fill = Species)) +
    geom_boxplot()

# 선 그래프
ggplot(data, aes(x = date, y = value)) +
    geom_line() +
    geom_point()

ggplot2 핵심 구조:

ggplot(데이터, aes(x=변수, y=변수, color=변수)) +
    geom_xxx() +     # 그래프 유형 (point, line, bar, histogram, boxplot)
    labs() +          # 제목, 축 이름
    theme_xxx()       # 테마

시험 핵심: ggplot2에서 aes()는 미적 매핑(aesthetic mapping)으로 데이터를 시각적 속성에 연결한다. geom_xxx()는 기하학적 객체(geometric object)로 그래프 유형을 결정한다.


연습문제


기본 문제

문제 1. 다음 중 비율 척도에 해당하는 것은?

① 온도(℃) ② 학점(A/B/C) ③ 몸무게(kg) ④ 지능지수(IQ)

정답: ③ 해설: 몸무게는 절대 영점(0kg = 무게 없음)이 있으므로 비율 척도이다. 온도(℃)와 IQ는 등간 척도(0이 "없음"을 의미하지 않음), 학점은 순서 척도이다.


문제 2. 이상값이 포함된 데이터에서 대표값으로 가장 적합한 것은?

① 평균 ② 중앙값 ③ 최빈값 ④ 표준편차

정답: ② 해설: 중앙값(Median)은 이상값에 강건(Robust)하여 이상값이 있을 때 대표값으로 가장 적합하다.


문제 3. 포아송분포의 특징으로 올바른 것은?

① 평균 > 분산 ② 평균 < 분산 ③ 평균 = 분산 ④ 평균과 분산은 무관

정답: ③ 해설: 포아송분포 Poisson(λ)에서 평균과 분산은 모두 λ로 같다.


문제 4. 제1종 오류에 대한 설명으로 올바른 것은?

① 귀무가설이 거짓인데 채택하는 오류 ② 귀무가설이 참인데 기각하는 오류 ③ 대립가설이 참인데 기각하는 오류 ④ 대립가설이 거짓인데 채택하는 오류

정답: ② 해설: 제1종 오류(α 오류)는 귀무가설(H₀)이 참인데 잘못 기각하는 오류이다. "없는데 있다고 판단"하는 것이다.


문제 5. 다중 회귀분석에서 독립변수 간의 높은 상관관계로 인해 발생하는 문제는?

① 이분산성 ② 자기상관 ③ 다중공선성 ④ 정규성 위반

정답: ③ 해설: 다중공선성(Multicollinearity)은 독립변수들 간에 강한 상관관계가 있을 때 발생하며, VIF(분산팽창요인)로 진단한다.


문제 6. 연관분석에서 향상도(Lift)가 1인 경우의 해석으로 올바른 것은?

① 강한 양의 연관 관계 ② 강한 음의 연관 관계 ③ 두 항목은 독립 ④ 데이터 부족

정답: ③ 해설: 향상도(Lift) = 1이면 두 항목은 서로 독립이며, 우연히 함께 구매하는 수준이다.


문제 7. K-means 군집분석에 대한 설명으로 올바르지 않은 것은?

① k를 사전에 지정해야 한다 ② 초기 중심점에 영향을 받지 않는다 ③ 유클리드 거리를 주로 사용한다 ④ 반복적으로 중심을 재계산한다

정답: ② 해설: K-means는 초기 중심점(centroid)에 민감하다. 따라서 nstart 옵션으로 여러 번 실행하여 최적의 결과를 선택하는 것이 좋다.


문제 8. 다음 R 코드의 결과는?

x <- c(3, 7, NA, 5, 2)
mean(x, na.rm = TRUE)

① NA ② 3.4 ③ 4.25 ④ 17

정답: ③ 해설: na.rm = TRUE는 NA를 제거하고 계산한다. (3+7+5+2)/4 = 17/4 = 4.25


문제 9. 다음 중 분류 모델의 평가 지표에서 "실제 Positive 중 올바르게 예측한 비율"은?

① 정확도 ② 정밀도 ③ 재현율 ④ 특이도

정답: ③ 해설: 재현율(Recall, 민감도) = TP / (TP+FN)으로, 실제 Positive 중 올바르게 Positive로 예측한 비율이다.


문제 10. 의사결정나무의 장점으로 올바르지 않은 것은?

① 해석이 쉽다 ② 이상값에 민감하지 않다 ③ 과적합이 발생하지 않는다 ④ 비선형 관계를 포착할 수 있다

정답: ③ 해설: 의사결정나무는 과적합(Overfitting) 경향이 있는 것이 대표적 단점이다. 가지치기(Pruning)로 이를 완화한다.


심화 문제

문제 11. 다음 연관분석 결과를 해석하시오.

전체 거래: 500건, A 구매: 200건, B 구매: 150건, A와 B 동시 구매: 100건

지지도, 신뢰도, 향상도를 구하시오.

정답:

  • 지지도(Support) = P(A∩B) = 100/500 = 0.2 (20%)
  • 신뢰도(Confidence) = P(B|A) = P(A∩B)/P(A) = 100/200 = 0.5 (50%)
  • 향상도(Lift) = 신뢰도/P(B) = 0.5 / (150/500) = 0.5/0.3 = 1.67
  • 해석: 향상도가 1보다 크므로 A와 B는 양의 연관 관계가 있다.

문제 12. 다음 R 코드의 출력 결과는?

x <- c(10, 20, 30, 40, 50)
x[x > 25]

① 10 20 ② 30 40 50 ③ TRUE TRUE TRUE ④ 3 4 5

정답: ② 해설: x > 25는 논리 벡터 (FALSE, FALSE, TRUE, TRUE, TRUE)를 생성하고, 이를 인덱스로 사용하면 TRUE인 위치의 값 30, 40, 50이 반환된다.


문제 13. 다음 혼동 행렬에서 정밀도와 재현율을 구하시오.

예측: P예측: N
실제: P4010
실제: N545

정답:

  • TP=40, FN=10, FP=5, TN=45
  • 정밀도 = TP/(TP+FP) = 40/(40+5) = 40/45 = 0.889 (88.9%)
  • 재현율 = TP/(TP+FN) = 40/(40+10) = 40/50 = 0.8 (80%)
  • F1 = 2×0.889×0.8/(0.889+0.8) = 0.842

문제 14. 다음 중 ggplot2의 문법 구조로 올바른 것은?

① ggplot(data) + aes(x, y) + geom_point ② ggplot(data, aes(x, y)) + geom_point() ③ ggplot(aes(x, y), data) + point() ④ geom_point(data, aes(x, y))

정답: ② 해설: ggplot2는 ggplot(데이터, aes(매핑)) + geom_xxx() 구조를 따른다. geom 함수에는 반드시 괄호()가 필요하다.


문제 15. 중심극한정리에 대한 설명으로 올바르지 않은 것은?

① 표본 크기가 충분히 크면 표본평균은 정규분포를 따른다 ② 모집단이 정규분포가 아니어도 성립한다 ③ 보통 표본 크기 n ≥ 30이면 적용 가능하다 ④ 표본 크기가 클수록 표본평균의 분산도 커진다

정답: ④ 해설: 표본 크기(n)가 커질수록 표본평균의 표준오차(SE = σ/√n)는 작아진다. 즉, 표본 크기가 클수록 표본평균의 분산은 줄어든다.