내일배움캠프

[본캠프] 데이터기반 QA/QC 부트캠프 31일차

min0jun 2026. 6. 24. 20:51

1. 오늘의 학습 목표

오늘은 머신러닝과 통계학을 나누어 학습했다.

머신러닝에서는 로지스틱 회귀를 마무리하고, 회귀와 분류 모델의 차이를 다시 정리하는 것이 목표였다. 선형회귀와 로지스틱 회귀가 어떤 점에서 비슷하고, 어떤 문제에서 다르게 사용되는지 확인했다. 특히 로지스틱 회귀는 분류 문제에서 사용되며, 정확도와 F1-score 같은 평가 지표로 모델을 판단한다는 점을 다시 짚었다.

통계학에서는 가설검정을 사용할 때 조심해야 할 부분들을 학습했다. 단순히 p-value가 0.05보다 작다고 해서 바로 의미 있는 결과라고 받아들이면 안 되고, 분석 과정에서 결과를 왜곡할 수 있는 여러 상황을 함께 봐야 한다는 점이 핵심이었다.


2. 오늘 학습한 내용

머신러닝

로지스틱 회귀 정리

로지스틱 회귀는 이름에 “회귀”가 들어가지만, 실제로는 분류 문제에 사용되는 모델이다.

선형회귀가 연속적인 숫자 값을 예측한다면, 로지스틱 회귀는 어떤 데이터가 특정 범주에 속할 확률을 예측한다. 예를 들어 타이타닉 데이터에서는 승객이 생존했는지, 생존하지 못했는지처럼 0 또는 1로 나뉘는 값을 예측할 수 있다.

로지스틱 회귀는 선형회귀의 아이디어와 연결되어 있기 때문에 이해하기 쉽고, 모델의 해석도 비교적 직관적이다. 각 변수의 계수를 통해 어떤 변수가 결과에 어떤 방향으로 영향을 주는지 볼 수 있다.

다만 복잡한 비선형 관계를 표현하기에는 한계가 있을 수 있다. 데이터의 패턴이 단순하지 않거나 변수 간 관계가 복잡하면 로지스틱 회귀만으로는 충분하지 않을 수도 있다.

선형회귀와 로지스틱 회귀 비교

오늘은 선형회귀와 로지스틱 회귀의 공통점과 차이점도 정리했다.

공통점은 둘 다 모델을 만들기 쉽고, 변수의 계수를 통해 결과를 해석하기 쉽다는 점이다. 또한 입력 변수 X에는 수치형 변수와 범주형 변수를 모두 사용할 수 있다.

차이점은 예측하려는 Y값의 형태에서 나온다.

선형회귀는 수치형 값을 예측한다. 예를 들어 가격, 점수, 매출처럼 연속적인 값을 예측할 때 사용한다. 이때는 MSE, R² 같은 지표로 모델 성능을 평가한다.

반면 로지스틱 회귀는 범주형 값을 예측한다. 예를 들어 생존 여부, 합격 여부, 구매 여부처럼 결과가 범주로 나뉘는 문제에 사용한다. 이때는 Accuracy, F1-score 같은 지표로 모델을 평가한다.

정리하면 숫자를 예측하면 회귀, 범주를 예측하면 분류라고 볼 수 있다.

로지스틱 회귀 실습 흐름

로지스틱 회귀 실습에서는 데이터를 준비하고, 모델을 학습시킨 뒤, 예측 결과를 평가하는 흐름을 다시 확인했다.

from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, f1_score

model = LogisticRegression()
model.fit(X_train, y_train)

y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
f1 = f1_score(y_test, y_pred)

이 흐름 자체는 단순해 보이지만, 실제로 중요한 부분은 어떤 변수를 넣고 뺄지 결정하는 과정이다. 같은 모델을 사용하더라도 어떤 변수를 사용하느냐에 따라 성능이 달라질 수 있다.

그래서 타이타닉 데이터처럼 여러 변수가 있는 데이터에서는 다양한 조합을 시도하면서 F1-score를 높이는 방식으로 모델을 개선할 수 있다.

다만 여기서도 무작정 성능이 좋은 조합만 찾는 것이 아니라, 왜 그 변수가 의미가 있는지 함께 생각하는 것이 중요하다.


통계학

재현 가능성

통계학에서는 먼저 재현 가능성에 대해 학습했다.

재현 가능성이란 같은 연구나 실험을 반복했을 때 일관된 결과가 나오는지를 의미한다. 결과가 한 번만 우연히 나온 것인지, 반복해도 비슷하게 나오는 것인지를 확인하는 개념이다.

분석 결과가 재현되지 않는다면 그 결과의 신뢰도는 낮아진다. 특히 가설검정에서는 p-value가 기준보다 작게 나왔다고 해서 항상 믿을 수 있는 결과라고 볼 수 없다.

p-value가 0.05보다 작다는 것은 통계적으로 유의하다고 판단할 수 있는 기준이지만, 그 자체가 결과의 절대적인 진실을 보장하는 것은 아니다. 우연히 유의미한 결과가 나올 수도 있고, 분석 과정에서 잘못된 방식이 들어가면 재현성이 떨어질 수도 있다.

결국 통계 분석에서는 “한 번 유의미하게 나왔는가”보다 “반복해도 신뢰할 수 있는가”가 중요하다.

p-해킹

p-해킹은 원하는 결과를 얻기 위해 데이터를 반복적으로 분석하거나 변수를 계속 바꿔가며 p-value를 인위적으로 낮추는 행위다.

처음에는 분석을 많이 해보는 것이 좋은 것처럼 느껴질 수 있다. 하지만 결과를 보면서 계속 조건을 바꾸고, p-value가 0.05보다 작게 나오는 순간만 골라서 보고한다면 분석 결과는 왜곡될 수 있다.

예를 들어 여러 변수를 계속 넣고 빼면서 유의미한 결과가 나올 때까지 반복한다면, 실제로는 의미 없는 관계인데도 의미 있는 것처럼 보일 수 있다.

그래서 가설검정을 할 때는 가능한 분석 전에 가설을 먼저 세우고, 그 가설을 기준으로 검증하는 방식이 필요하다. 탐색적으로 분석했다면 모든 결과를 투명하게 보고하거나, 여러 번 검정한 것에 대한 보정 방법을 고려해야 한다.

선택적 보고

선택적 보고는 여러 분석 결과 중 유의미한 결과만 골라서 보고하는 것이다.

이 방식은 분석 결과를 그럴듯하게 보이게 만들 수 있지만, 전체 결과를 왜곡한다. 유의미하지 않은 결과를 숨기고 유의미한 결과만 보여주면, 실제보다 강한 결론처럼 보일 수 있다.

예를 들어 20개의 분석을 했는데 그중 1개만 유의미하게 나왔다면, 그 1개만 보고하는 것은 문제가 될 수 있다. 전체 결과를 함께 봐야 그 결과가 우연인지, 실제 의미가 있는지 판단할 수 있다.

선택적 보고는 p-해킹과도 연결된다. 둘 다 결과를 있는 그대로 보는 것이 아니라, 원하는 방향으로 보이게 만드는 문제를 가지고 있다.

자료수집 중단 시점 결정

자료수집 중단 시점도 가설검정에서 중요한 문제다.

데이터를 수집하기 전에 언제까지 수집할지 정하지 않으면, 원하는 결과가 나올 때까지 데이터를 계속 모으게 될 수 있다. 이 경우 분석 결과의 신뢰성이 떨어진다.

예를 들어 처음에는 50명의 데이터를 수집하기로 했는데 결과가 마음에 들지 않아 100명, 200명까지 계속 늘린다면, 어느 순간 우연히 p-value가 낮아질 수도 있다. 그리고 그 순간을 기준으로 결과를 보고하면 실제보다 의미 있는 결과처럼 보일 수 있다.

따라서 데이터 수집은 가능하면 사전에 계획을 세우고 진행해야 한다. 분석 결과를 보면서 수집을 멈추거나 이어가는 방식은 조심해야 한다.

데이터 탐색과 검증 분리

마지막으로 데이터 탐색과 검증을 분리하는 개념을 학습했다.

데이터 탐색은 데이터에서 패턴을 찾아보고 가설을 세우는 과정이다. 검증은 그 가설이 실제로도 유효한지 확인하는 과정이다.

문제는 같은 데이터로 탐색도 하고 검증도 하면 과적합이 생길 수 있다는 점이다. 즉, 특정 데이터에만 잘 맞는 패턴을 찾아놓고 그것이 일반적인 규칙인 것처럼 착각할 수 있다.

그래서 탐색용 데이터와 검증용 데이터를 분리해야 한다. 머신러닝에서 train/test 데이터를 나누는 것과 비슷한 흐름이라고 볼 수 있다.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

탐색 데이터에서 발견한 패턴이 검증 데이터에서도 유지된다면, 그 결과는 더 신뢰할 수 있다. 반대로 탐색 데이터에서는 좋아 보였지만 검증 데이터에서는 성능이 떨어진다면, 그 패턴은 일반화되기 어렵다고 볼 수 있다.

이 부분은 통계학과 머신러닝 모두에서 중요한 기준이라는 생각이 들었다.


3. 나의 간단 소감

오늘 머신러닝에서는 로지스틱 회귀를 마무리하면서 회귀와 분류의 차이를 다시 정리했다. 처음에는 로지스틱 회귀라는 이름 때문에 계속 회귀 문제처럼 느껴졌는데, 이제는 범주를 예측하는 분류 모델이라는 점이 조금 더 자연스럽게 잡힌다.

특히 선형회귀와 로지스틱 회귀를 비교해서 보니 차이가 더 명확해졌다. 숫자를 예측하는지, 범주를 예측하는지에 따라 문제의 성격이 달라지고, 그에 따라 평가 지표도 달라진다는 점이 중요했다. 단순히 모델을 돌리는 것보다 “이 문제는 어떤 유형의 문제인가?”를 먼저 구분하는 것이 먼저라는 생각이 들었다.

통계학에서는 가설검정의 주의점을 배웠는데, 생각보다 현실적인 내용이 많았다. p-value가 0.05보다 작으면 끝이라고 생각하기 쉬운데, 실제로는 그 결과가 어떻게 나왔는지, 분석 과정에서 유리한 결과만 고른 것은 아닌지, 데이터를 언제까지 수집했는지까지 봐야 했다.

p-해킹이나 선택적 보고는 처음 들으면 일부러 속이는 행동처럼 느껴지지만, 실제 분석 과정에서는 무심코 그렇게 될 수도 있겠다는 생각이 들었다. 결과가 마음에 들지 않아서 변수를 조금 더 바꿔보고, 데이터도 조금 더 모아보고, 유의미한 결과만 강조하다 보면 분석의 신뢰성이 무너질 수 있다.

오늘 내용은 통계와 머신러닝이 따로 떨어진 느낌이라기보다, 둘 다 결국 결과를 얼마나 믿을 수 있는가를 다룬다는 점에서 연결되어 보였다. 모델을 만들고 점수를 보는 것도 중요하지만, 그 결과가 우연인지, 과적합인지, 검증 가능한 결과인지까지 함께 봐야 한다는 점이 오늘 가장 크게 남았다.