통계의 기초
- 현상을 기호로 바꾸고 그다음 코드로 바꾸고...
현상을 기호로 바꾸는 도구가 통계이다.
통계학은 데이터를 수집, 정리, 분석, 해석하여 의미있는 정보를 도출하는 학문.
수집 - API,CSV,SQL
정리 - Pandas / DB
분석 - 그래프 (행, 컬럼, 통계)
>>>>>>특징을 도출하여 해석가능하게 함.
데이터를 통해 특정 현상의 패턴을 이해하고, 이를 기반으로 예측하거나 의사결정을 지원
통계학은 기술통계, 추론통계로 구분됨.
1. 기술통계
- 데이터를 요약하고 정리하여 쉽게 이해할 수 있도록 표현하는 방법을 다룸
(1) 중심 경향 측정
- 데이터의 중심 값을 찾는 방법
- 대표적인 지표 : 평균, 중앙값, 최빈값
# 평균 - 데이터 값들의 총합을 데이터 개수로 나눈 값. 데이터가 정규분포를 따를 때 대표적인 값이 된다.
ex) 60, 70, 80, 90, 100 데이터가 있다면 평균은 (60+70+80+90+100) ÷ 5 = 80
장점 - 전체적인 흐름을 쉽게 파악 가능
단점 - 이상치에 민감하여 왜곡될 가능성이 있음
# 중앙값 - 데이터를 크기순으로 정렬했을 때, 중앙에 위치하는 값
ex) 60, 70 ,80 ,90, 100 데이터가 있다면 중앙값은 중앙에 위치하는 값인 80이다.
장점 - 이상치의 영향을 받지 않음
단점 - 데이터의 전체적인 특성을 나타내기에는 부족할 수 있음
# 최빈값(빈번하게) - 데이터에서 가장 자주 등장하는 값
ex) 60, 70, 80, 80, 90, 100 데이터가 있다면 최빈값은 80
장점 - 범주형 데이터에서 유용하게 사용됨
단점 : 데이터에 따라 최빈값이 없거나, 여러개가 존재할 수 있음.
※ 범주형 데이터란?
숫자로 연산(더하기, 빼기 등)할 수 없는 데이터.
각 값이 숫자가 아니라 "이름"이나 "분류"로 되어 있는 데이터.
숫자로 평균을 낼 수 없는 범주형 데이터에서는, 최빈값을 보면 사람들이 가장 많이 선택한 항목이 뭔지 바로 알 수 있기 때문에 유용
(2) 산포도 측정
- 산포도는 데이터가 얼마나 흩어져 있는지를 나타내는 개념.
- 데이터가 평균을 중심으로 얼마나 퍼져 있는지를 분석
# 범위
- 데이터의 최댓값과 최솟값의 차이를 의미. (Min - Max)
ex) 100(최댓값) - 60(최솟값) = 40
# 분산
- 데이터 값들이 평균에서 얼마나 떨어져 있는지를 나타내는 지표
- 표준편차의 제곱
- 값이 클수록 데이터의 변동성이 크다는 것을 의미한다.
- ex) 시험 점수가 모두 비슷하게 나왔다면 분산이 작고, 점수가 크게 차이 난다면 분산이 커진다.

※ 분산 구하는 방법
분산을 구할 때 각 데이터가 평균과 얼마나 차이 나는지를 알기 위해 두 가지를 해야 한다.
- 각 데이터에서 평균을 빼고
- 그 값을 제곱한 후 (왜냐하면, 음수는 없애야 하니까)
- 그 값들을 모두 더한 후
- 데이터 개수로 나누는 것 (※ 모집단은 전체 개수, 표본은 한 개 적게)
※ 모집단 분산에서는 전체 데이터를 다 사용하니까, '데이터 개수'로 나누면 정확한 분산을 구할 수 있다.
하지만 표본 분산에서는 일부 데이터만 사용하므로, 전체 모집단의 분산을 정확하게 알 수 없기 때문에 조금 더 큰 값으로 보정할 필요가 있음. 그래서 n-1로 나눈다. ( 정확한 계산은 아니지만 가능한 한 정확하게 추정하려는 과정 : 자유도 보정)
예시)
- 데이터: 1, 3, 5, 7
- 평균: (1+3+5+7) / 4 = 4
분산 구하기:
1. 각 데이터에서 평균(4)을 뺀다:
- 3 − 4= −1
- 5 − 4 = 1
- 7 − 4 = 3
2. 그 값들을 제곱 한다:

3. 그 제곱값들을 모두 더한다:
- 9 + 1 + 1 + 9 = 20
4. 데이터 개수(4개)로 나눈다:
- 20 / 4 = 5
결과: 분산 = 5
※ 분산은 차이의 제곱을 합한 것이고, 퍼짐 정도를 알 수 있지만 직관적으로 이해하기 어렵다.
표준편차는 분산의 제곱근으로, 퍼짐 정도를 원래 데이터 단위로 되돌려서 더 직관적으로 알 수 있도록 도와준다.
# 표준편차
- 분산의 제곱근을 구한 값으로, 데이터가 평균에서 얼마나 떨어져 있는지를 쉽게 해석할 수 있도록 변환한 값.

값이 클수록 데이터가 퍼져있고, 작을수록 데이터가 평균에 가까운 값으로 모여있음을 의미.
※ 분산과 표준편차를 구하는 이유 - 데이터를 좀 더 정확하게 이해하고, 변동성과 불확실성을 예측하기 위해서.
- 분산은 데이터를 평균과의 차이를 구하는 데 중요한 역할
- 표준편차는 이를 직관적이고 실제적으로 이해하기 쉽게 만들어줌.
# 사분위 범위 - 데이터의 1사분위(Q1)와 3사분위(Q3) 사이의 범위를 의미하며, 이상치를 판별하는 데 유용.

※ 사분위수는 데이터를 정렬했을 때, 전체 데이터를 4개의 같은 비율로 나누는 값들이다.
- 1사분위수(Q1): 데이터의 하위 25% 지점, 즉 전체 데이터에서 '가장 작은 25%'에 해당하는 값.
- 2사분위수(Q2): 중앙값, 전체 데이터를 두 개로 나누는 값. (50 %)
- 3사분위수(Q3): 데이터의 상위 25% 지점, 즉 전체 데이터에서 '가장 큰 25%'에 해당하는 값. (75%)

사분위 범위(IQR)**는 Q3 - Q1으로 계산된다. 즉, 데이터의 '중간 50%'가 얼마나 퍼져 있는지를 나타내는 지표임.
※ IQR을 이용한 이상치 판별 방법
- IQR을 구한 후:
- 상한값 = Q3 + 1.5 * IQR
- 하한값 = Q1 - 1.5 * IQR
- 이 상한값보다 크거나, 하한값보다 작은 데이터는 이상치로 간주함.
ex)
데이터가 1, 3, 5, 7, 9, 11, 15일 때:
- Q1 = 3, Q3 = 11
- IQR = 11 - 3 = 8
- 상한값 = Q3 + 1.5 * IQR = 11 + 1.5 * 8 = 11 + 12 = 23
- 하한값 = Q1 - 1.5 * IQR = 3 - 1.5 * 8 = 3 - 12 = -9
이 값보다 크거나 작은 데이터는 이상치로 판단할 수 있다. 예를 들어, 23보다 큰 값이나 -9보다 작은 값이 있다면, 그것은 이상치로 간주된다.
IQR을 사용하면, 데이터의 중간 50% 범위를 알 수 있고, 이를 통해 이상치를 쉽게 찾아낼 수 있다. 평균값이나 범위(최대값과 최소값)만 보면 이상치를 정확히 찾기가 어려울 수 있지만, IQR을 쓰면 이상치를 좀 더 객관적으로 찾을 수 있다.
(3) 데이터 시각화
# 히스토그램 : 데이터의 분포를 막대 그래프로 표현
# 박스플롯 : 사분위수와 이상치를 한눈에 볼 수 있도록 정리
# 산점도 : 두 변수 간의 관계를 나타내는 그래프
2. 추론통계
- 표본 데이터를 이용하여 모집단의 특성을 추정하는 방법
(표본을 이용해 모든 데이터를 대표하는 결론을 내리는 방법)
- 일부 데이터(표본)를 분석하여 전체 데이터(모집단)를 예측 (모든 데이터를 직접 수집하기 어렵기 때문)
ex) 한국에 사는 사람들의 평균 키를 알고 싶다고 하자. 그런데 한국에 사는 모든 사람의 키를 측정하는 건 불가능. 그래서 무작위로 1,000명의 키를 조사(표본) 해서, 그들의 평균 키를 계산한 후, 이를 전체 한국인의 키를 추측하는 데 사용한다.
이처럼 일부 데이터를 보고 전체를 예측하는 것이 추론통계이다.
(1) 가설검정
- 주어진 데이터가 특정 가설을 뒷받침하는지 여부를 판단하는 과정
- 어떤 주장이 맞는지 통계적으로 판단하는 과정
# 귀무가설 : "차이가 없다" 는 기본가설
# 대립가설 : "차이가 있다" 는 가설
# 유의수준
- 귀무가설과 대립가설을 구분하기 위해 씀
- ☆ p-value ☆
- "이 결과가 우연히 나왔을 확률"을 계산
- 보통 p-value가 0.05(5%)보다 작으면 귀무가설을 기각함
- 예: p-value = 0.03 → "우연히 나올 확률이 3%밖에 안 되므로, 이 약은 효과가 있다고 볼 수 있다."
※ 가설검정의 과정
1) 귀무가설(H₀)과 대립가설(H₁)을 설정
- 예:
- 귀무가설 H₀: "이 약은 체중 감량 효과가 없다"
- 대립가설 H₁: "이 약은 체중 감량 효과가 있다"
2) 표본을 수집하고 분석
- 다이어트 약을 100명에게 먹여서 체중 변화를 측정
3) 유의확률(p-value) 계산
- "이 결과가 우연히 나왔을 확률"을 계산
- 보통 p-value가 0.05(5%)보다 작으면 귀무가설을 기각함
- 예: p-value = 0.03 → "우연히 나올 확률이 3%밖에 안 되므로, 이 약은 효과가 있다고 볼 수 있다."
4) 결론 내리기
- p-value가 0.05보다 작으면 → 귀무가설 기각 → 대립가설 채택 (즉, "이 약은 효과가 있다")
- p-value가 0.05보다 크면 → 귀무가설 채택 (즉, "이 약은 효과가 없다")
(2) 신뢰구간
- 신뢰구간은 표본 데이터를 기반으로 모집단의 평균이나 비율이 포함될 범위를 추정하는 방법이다.
즉, "우리가 원하는 값이 이 범위 안에 있을 것이다."라고 예측.
ex) 쉽게 이해하는 신뢰구간
어떤 학교 학생들의 평균 키를 알고 싶다. 하지만 모든 학생의 키를 측정할 순 없으니, 100명의 표본을 뽑아서 평균 키를 계산했다.
- 표본 평균 = 167cm
- 신뢰구간 = [165cm, 169cm] (95% 신뢰수준)
이 의미는?
"우리가 조사한 100명의 평균 키가 167cm인데, 실제 전체 학생들의 평균 키는 95% 확률로 165cm ~ 169cm 사이에 있을 것이다!" 즉, 신뢰구간은 전체(모집단)의 값이 포함될 가능성이 높은 범위를 말하는 것.
※ 신뢰구간의 핵심 개념
신뢰구간(Confidence Interval, CI)
- 모집단의 평균(또는 비율)이 포함될 가능성이 높은 범위
- 예: "전체 한국인의 평균 키는 95% 확률로 165~175cm 사이에 있다"
신뢰수준(Confidence Level, CL)
- 우리가 얼마나 확신하는지를 나타냄
- 보통 **90%, 95%, 99%**를 사용
- 95% 신뢰수준이면 → "100번 조사하면 95번은 이 범위 안에 있을 것이다"
표본이 많을수록 신뢰구간이 좁아짐
- 표본이 작으면 오차가 커서 범위가 넓어짐
- 표본이 크면 더 정확해져서 범위가 좁아짐
신뢰구간 공식

신뢰구간 = 표본 평균 ± (임계값 × 표준오차)
- 표본 평균: 우리가 계산한 평균
- 임계값(z값): 신뢰수준에 따라 달라짐 (95% → 약 1.96)
- 표준오차(SE): 표본 데이터의 변동성
ex)
어떤 학교 학생 100명의 평균 키가 167cm, 표준편차가 5cm라고 해보자.
이때 95% 신뢰구간을 구하면?

즉, 신뢰구간 = [166cm, 168cm]
→ "이 학교 학생 전체의 평균 키는 95% 확률로 166~168cm 사이에 있다."
※ 신뢰구간을 왜 사용할까?
- 모집단의 값을 정확히 알 수 없기 때문
- 모든 데이터를 조사할 수 없어서, 표본을 사용해 모집단을 추정.
- 단순한 평균보다 더 신뢰할 수 있는 정보 제공
- "평균 키가 167cm입니다"보다 "평균 키는 95% 확률로 166~168cm 사이입니다"가 더 신뢰할만 함.
- 과학 연구, 여론 조사, 마케팅 등 다양한 분야에서 사용
- 선거 여론 조사: "후보 A의 지지율은 45% ± 3%"
- 의료 연구: "이 약을 먹으면 평균 체중이 2kg 감소할 가능성이 95%다"
(3) 회귀분석
- 두 개 이상의 변수 사이의 관계를 분석하는 방법. 어떤 변수(원인)가 다른 변수(결과)에 어떻게 영향을 주는지를 알아본다.
- 어떤 원인(X)이 결과(Y)에 어떤 영향을 주는지
- 내가 알고 싶은 것을 Y(종속변수)로 둔다.
# 단순 선형 회귀
가장 기본적인 형태로, 한 개의 원인(X)과 한 개의 결과(Y) 사이의 관계를 분석

- Y: 종속변수, 결과 변수 (시험 점수)
- X: 독립변수, 설명변수, 원인 변수 (공부 시간)
- a: X가 증가할 때 Y가 얼마나 변하는지 나타내는 기울기(회귀계수) (공부 시간이 늘어날 때 점수가 얼마나 오르는지)
- b: X가 0일 때 Y의 값(절편) (공부를 0시간 했을 때 예상되는 점수. X(원인)가 0일 때 Y(결과)의 값)
- 공부 시간이 늘어나면 점수가 증가하는 직선이 만들어짐.
# 다중 선형 회귀
- 여러개의 독립변수가 종속변수에 영향을 미치는지 분석.
- 원인(X)이 여러 개일 때 사용하는 회귀분석
- ex)
시험 점수는 공부 시간(X1)뿐만 아니라 수면 시간(X2), 학원 다니는 여부(X3) 등 여러 가지 요인에 영향을 받을 수 있음.
시험 점수(Y) = 공부 시간(X1) + 수면 시간(X2) + 학원 여부(X3) …
이렇게 여러 개의 원인(X)이 있을 때는 단순한 직선이 아니라 '입체적인 면(평면, 다차원 그래프)'으로 나타남.

- X1: 공부 시간
- X2: 수면 시간
- X3: 학원 여부 (다니면 1, 안 다니면 0)
- a1, a2, a3: 각각의 원인이 결과(Y)에 미치는 영향력
- b: 절편 ( X(원인)가 0일 때 Y(결과)의 값, 아무런 영향도 없을 때 기본적으로 나타나는 값. 수식적으로 Y 값이 어디서 시작하는지를 의미, 절편 b는 모든 X 값이 0일 때 Y 값을 의미.)
* 상관관계 (상관계수 값은 -1에서 1 사이)
- 양의 상관관계
X가 증가할수록 Y도 증가하는 긍정적 관계. 그래프가 오른쪽 위로 올라감.
(1에 가까울수록 강한 양의 상관관계)
- 음의 상관관계
X가 증가할수록 Y는 감소하는 부정적인 관계. 그래프가 오른쪽 아래로 내려감.
(-1에 가까울수록 강한 음의 상관관계)
※ 0에 가까울수록 상관관계가 없음.
예제 1 : A/B 테스트 (T-검정 활용)
- 두 그룹의 평균이 서로 유의미하게 다른지 확인하는 통계 방법이다. 이 두 그룹은 정말 차이가 있는 건지, 아니면 우연일지.
- T-검정을 하면 '우연이 아닐 확률'을 계산할 수 있음.
# 독립표본 T-검정 (두 그룹 비교)
- 두 개의 서로 다른 그룹을 비교할 때 사용.
- 남학생 vs 여학생 평균 키 차이
- 신약을 먹은 그룹 vs 안 먹은 그룹 혈압 차이
- 광고 A vs 광고 B의 매출 차이
- T-검정을 하면 p-value(유의확률) 값이 나옴.
- p-value < 0.05 → 유의미한 차이가 있다. (그룹 차이가 우연이 아닐 확률이 높음)
- p-value ≥ 0.05 → 차이가 별로 없는듯하다. (우연일 가능성이 큼)
예제1 시나리오
- 이메일 마케팅 캠페인에서 제목을 다르게 설정하여 두 그룹(A/B)으로 테스트함.
- A 그룹(기존 제목)과 B 그룹(새로운 제목)에서 이메일을 연 클릭률(CTR)을 비교하여 어떤 제목이 더 효과적인지 확인.
코드 (독립표본 T-검정)
# numpy와 scipy.stats 라이브러리를 불러와서 수학적 계산과 T-검정 함수를 사용 가능하게 함.
import numpy as np
from scipy import stats
# A/B 테스트 데이터 (CTR %)
# A 그룹과 B 그룹의 CTR 데이터를 리스트로 저장함.
group_A = [12, 15, 14, 10, 16, 14, 13, 15] # 기존 제목
group_B = [18, 21, 19, 22, 20, 23, 21, 22] # 새로운 제목
# 독립표본 T-검정 수행
# ttest_ind() 함수는 독립된 두 그룹의 평균을 비교하는 T-검정을 실행.
# t_stat → T-검정 통계량 (두 그룹의 차이를 숫자로 표현한 값)
# p_value → p-값 (두 그룹이 우연히 차이가 날 확률)
t_stat, p_value = stats.ttest_ind(group_A, group_B)
# t_stat와 p_value 값을 출력해서 두 그룹이 유의미하게 다른지 확인
print(f"T-검정 통계량: {t_stat}")
print(f"P-값: {p_value}")
# p-value < 0.05 → 두 그룹이 정말 다르다. 즉, B 제목이 A 제목보다 CTR이 높다는 것이 통계적으로 유의미하다.
# p-value ≥ 0.05 → 두 그룹 차이는 그냥 우연일 가능성이 높음.
if p_value < 0.05:
print("귀무가설 기각: 새로운 제목(B)이 기존 제목(A)보다 유의미하게 CTR이 높음")
else:
print("귀무가설 채택: 두 제목 간 CTR 차이가 없음")

결과 :
T-검정 통계량은 두 그룹 간 평균 차이가 얼마나 큰지, 그리고 그 차이가 얼마나 우연일 가능성이 적은지를 나타내는 값.
값이 음수인 이유는 B 그룹(새로운 제목)이 A 그룹(기존 제목)보다 평균이 높기 때문.
절댓값이 커질수록 두 그룹 간 차이가 크다는 의미.
즉, -7.92라는 값은 A와 B 그룹 간의 차이가 꽤 크다는 의미.
p-값은 '두 그룹이 우연히 차이가 났을 확률'
p-값이 아주 작은 값(여기서는 1.5496e-06, 즉 0.0000015496)이라는 건, 두 그룹 간에 차이가 우연히 발생했을 확률이 매우 낮다는 뜻.
일반적으로 p-값이 0.05보다 작으면, 두 그룹 간의 차이가 유의미하다고 판단.
예제 2: 고객 유지율 분석 (카이제곱 검정 활용)
- 카이제곱 검정은 범주형 데이터에서 주로 사용되며, 관찰된 값과 기대값 간의 차이를 계산해 통계적 유의미성을 판단하는 방법. 주로 적합도 검정과 독립성 검정에 사용.
- 카이제곱 검정은 집단(범주형 데이터) 간의 비율 차이를 비교하는 분석 방법
- 적합도 검정 : 관찰된 데이터가 특정 이론적 분포와 얼마나 잘 맞는지 평가하는 방법.
- 독립성 검정 : 두 범주형 변수 간에 상관관계가 있는지를 확인하는 방법.
- 카이제곱 통계량은 두 개의 값, '관찰된 값(observed values)'과 기대값(expected values) 간의 차이를 바탕으로 계산.
※ 카이제곱 검정 절차:
- 귀무가설 설정:
- 적합도 검정: "관찰된 데이터는 기대값과 차이가 없다."
- 독립성 검정: "두 변수는 서로 독립적이다."
- 기대값 계산:
- 기대값은 이론적으로 예상되는 값이나, 두 변수 간의 독립성을 가정했을 때의 예상 값.
- 카이제곱 통계량 계산:
- 위의 공식에 따라 계산한 후, 이 값을 자유도(df)와 유의수준(α)을 바탕으로 p-value를 계산.
- 결과 해석:
- p-value가 유의수준(α)보다 작으면 귀무가설을 기각하고, 두 변수 간에 유의미한 관계가 있다고 결론.
- p-value가 유의수준(α)보다 크면 귀무가설을 채택하고, 두 변수 간에 유의미한 관계가 없다고 결론.
예제2 시나리오
- 신규 고객 중 30일 후에도 서비스를 사용하는 고객과 그렇지 않은 고객을 분석.
- 가입한 고객 중에서 지속 사용 여부가 광고 유형에 따라 차이가 있는지 검증.
코드 ( 광고 유형(A, B, C)에 따라 고객 유지율(Yes/No)이 유의미한 차이가 있는지를 확인하는 카이제곱 독립성 검정 수행)
# Numpy와 Scipy 라이브러리를 가져온다.
# numpy는 데이터를 다루는데에, scipy는 통계분석에 사용됨.
import numpy as np
import scipy.stats as stats
# 광고 유형별 고객 유지(Yes)와 이탈(No)수를 배열로 저장.(np.array 사용)
# 광고 유형별 고객 유지 여부 (예: 유지(Yes), 이탈(No))
# [유지, 이탈]
data = np.array([[200, 300], # 광고 A
[250, 250], # 광고 B
[150, 350]]) # 광고 C
#stats.chi2_contingency(data) 함수 - 카이제곱 검정(Chi-Square Test)수행 (리턴값이 4개)
# chi2: 카이제곱 검정 통계량
# p_value: p-값 (유의확률, 귀무가설 기각 여부 판단)
# _: 기대값 등 다른 결과값 (여기선 필요없어서 _로 처리)(리턴값 두개만 사용하겠다.)
# 카이제곱 검정 수행
chi2, p_value, _, _ = stats.chi2_contingency(data)
# 카이제곱 검정통계량, P_value값 출력
print(f"카이제곱 검정 통계량: {chi2}")
print(f"P-값: {p_value}")
# P_value값이 0.05보다 작은지 아닌지에 따라 귀무가설 기각 혹은 채택
if p_value < 0.05:
print("귀무가설 기각: 광고 유형에 따라 고객 유지율이 다름")
else:
print("귀무가설 채택: 광고 유형과 고객 유지율 간 유의미한 차이가 없음")

결과 : p-값이 8.96e-10(=0.000000000896)인데, 이 값은 매우 작은 값(0.05보다 훨씬 작음)이다.
즉, 광고 유형(A, B, C)에 따라 고객 유지율이 유의미하게 다름. (p-값 해석이 가장 중요!)
카이제곱 검정 통계량 숫자가 클수록 그룹간 차이가 크다는 뜻.
(광고 유형에 따른 유지/이탈 분포차이가 크다는 뜻)
즉, 광고 유형(A, B, C)별 고객 유지율 차이가 크다.
※ T-검정 vs. 카이제곱 검정
구분 | T-검정 (t-test) | 카이제곱 검정 (chi-square test) |
사용 목적 | 두 그룹의 평균을 비교할 때 사용 | 두 개 이상의 범주형 데이터의 분포 차이를 비교할 때 사용 (비율 비교) |
데이터 유형 | 연속형 데이터 (예: 점수, 클릭률, 키, 몸무게 등) | 범주형 데이터 (예: "예/아니오", "성별", "구독/미구독" 등) |
예제 | 이메일 마케팅에서 A/B 테스트를 진행하여 클릭률(%) 비교 | 광고 유형 A, B, C 그룹별 고객 유지율 비교 |
가설 설정 | 귀무가설: 두 그룹의 평균이 같다 대립가설: 두 그룹의 평균이 다르다 |
귀무가설: 범주별 비율이 같다 대립가설: 범주별 비율이 다르다 |
통계량 | T-값 (t-statistic) | 카이제곱 값 (χ²-statistic) |
출력 결과 | p-value가 0.05보다 작으면 → 평균 차이가 유의미함 | p-value가 0.05보다 작으면 → 범주별 비율 차이가 유의미함 |
예제 3: 광고 ROI 예측 (회귀 분석 활용)
예제3 시나리오
- 광고비 지출에 따라 웹사이트 방문자 수가 증가하는 패턴을 분석.
- 선형 회귀 분석을 사용하여 광고비가 방문자 수에 미치는 영향을 예측.
코드 (광고비와 방문자 수간의 관계를 분석하는 단순 선형 회귀 모델을 만드는 코드. 광고비를 많이 쓰면 방문자가 얼마나 증가하는지를 예측.)
# 라이브러리 불러오기
# numpy : 숫자 데이터를 다룰 때 사용 (배열 연산)
# matplotlib.pyplot: 그래프를 그릴 때 사용
# LinearRegression: 선형 회귀 모델을 만들기 위한 라이브러리 (머신러닝)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# 광고비(ad_spend)와 방문자 수(visitors) 데이터를 배열로 저장.(np.array 사용)
# 독립변수: 광고비(ad_spend), 종속변수: 방문자수(visitors)
# reshape(-1, 1): 광고비 데이터를 2차원 배열로 변환 (기계 학습 모델에서 2차원 입력을 요구함)
# 광고비(x)와 방문자 수(y) 데이터 (단위: 만원)
ad_spend = np.array([10, 20, 30, 40, 50, 60, 70, 80]).reshape(-1, 1)
visitors = np.array([100, 200, 280, 350, 400, 500, 620, 700])
# 선형 회귀 모델 생성 및 학습
# LinearRegression(): 선형 회귀 모델을 생성
# fit(x, y): 광고비(x)와 방문자 수(y)를 학습하여 최적의 직선을 찾음
model = LinearRegression()
model.fit(ad_spend, visitors)
# 예측 수행
# predict(x): 광고비(x)를 입력하면 방문자 수(y)를 예측함
predicted_visitors = model.predict(ad_spend)
# 그래프로 시각화
# 파란 점(scatter) → 실제 데이터
# 빨간 선(plot) → 선형 회귀 모델이 예측한 값 (회귀 직선)
plt.scatter(ad_spend, visitors, color='blue', label='Actual Data')
plt.plot(ad_spend, predicted_visitors, color='red', linewidth=2, label='Regression Line')
plt.xlabel('Ad Spend (만원)')
plt.ylabel('Visitors')
plt.title('광고비와 방문자 수의 관계')
plt.legend()
plt.show()
# 회귀 계수와 절편 출력
# model.coef_: 기울기 (a값 : 광고비 증가에 따른 방문자 증가량)
# model.intercept_: 절편 (b값 : 광고비 0원일 때 예상 방문자 수)
print(f"회귀 계수 (광고비 영향): {model.coef_[0]}")
print(f"절편: {model.intercept_}")
fit(x, y)를 실행하면 계수값(a)와 절편(b)를 자동으로 계산해줌.

- a (기울기, 회귀 계수) → 광고비가 방문자 수에 미치는 영향 (광고비 증가에 따른 방문자 증가량)
광고비가 1만원 증가할 때 방문자 수가 몇 명 증가하는지를 나타냄.
예를 들어, model.coef_ = 8.5라면, 광고비 1만원을 더 쓰면 방문자가 8.5명 증가한다는 의미.
- b (절편, intercept) → 광고비가 0원일 때 예상 방문자 수
광고비가 0원일 때 예상 방문자 수.
예를 들어, model.intercept_ = 50이라면 광고비 없이도 50명 방문한다는 뜻.
결과

광고비(x)가 1만원 증가할 때마다 방문자 수(y)는 약 8.35명 증가하고,
광고비가 0원일 때 기본적으로 예상되는 방문자 수는 18명. 광고비와 방문자 수는 긍정적인 관계.
파란점은 실제 데이터 이고 빨간선은 선형회귀모델이 예측한 값(회귀직선)
회귀선이 실제 데이터와 거의 일치한다는 것은 모델이 데이터를 잘 설명하고 있다는 의미.
예제 3-1: 광고비와 매출관계분석 (회귀 분석 활용)
예제3-1 시나리오
- 어떤 회사의 광고비가 매출에 미치는 영향을 분석하고자 한다. 아래 데이터를 사용하여 다중회귀분석을 수행하기.
SNS 광고비(만원) | 검색 광고비(만원) | 배너 광고비(만원) | 매출(만원) |
10 | 20 | 5 | 100 |
15 | 25 | 7 | 120 |
20 | 30 | 8 | 140 |
25 | 35 | 10 | 160 |
30 | 40 | 12 | 180 |
코드 (다중 선형 회귀를 사용하여 각 광고비(SNS, 검색, 배너)가 매출에 어떻게 영향을 미치는지를 분석하는 코드)
# numpy : 숫자 데이터를 다룰 때 사용 (배열 연산)
# LinearRegression: 선형 회귀 모델을 만들기 위한 라이브러리 (머신러닝)
import numpy as np
from sklearn.linear_model import LinearRegression
# 광고 유형별 광고비 데이터와 매출 데이터 (단위: 만원)
# 데이터를 배열로 저장.(np.array 사용)
# reshape(-1, 1): 광고비 데이터를 2차원 배열로 변환 (기계 학습 모델에서 2차원 입력을 요구함)
sns_ad = np.array([10, 15, 20, 25, 30]).reshape(-1, 1) # SNS 광고비(만원)
search_ad = np.array([20, 25, 30, 35, 40]).reshape(-1, 1) # 검색 광고비(만원)
banner_ad = np.array([5, 7, 8, 10, 12]).reshape(-1, 1) # 배너 광고비(만원)
sales = np.array([100, 120, 140, 160, 180]) # 매출 (만원)
# 세가지 광고비 각각에 대해 단순 선형 회귀 학습 모델 생성
# LinearRegression()은 회귀 분석을 위한 모델
# 각 광고 유형에 대해 별도로 모델을 만들어서 학습
models = {
"SNS 광고비": LinearRegression(),
"검색 광고비": LinearRegression(),
"배너 광고비": LinearRegression()
}
ads = {
"SNS 광고비": sns_ad, # 각 광고 유형별로 광고비 데이터를 저장한 딕셔너리
"검색 광고비": search_ad,
"배너 광고비": banner_ad
}
# 모델 학습
# 각 광고비에 대해 학습을 시키는 부분
coefficients = {} # 광고 유형별 회귀 계수를 저장할 빈 딕셔너리 생성
intercepts = {} # 광고 유형별 절편을 저장할 빈 딕셔너리 생성
# model.fit(ads[ad_type], sales)는 주어진 광고비(ads[ad_type])와 매출(sales) 데이터를 사용해서 회귀 모델을 학습시키는 부분.
# model.coef_[0]는 해당 광고비의 회귀 계수(광고비의 영향력)
# model.intercept_는 절편(광고비가 0일 때 예상되는 매출)
for ad_type, model in models.items():
model.fit(ads[ad_type], sales) # fit : 학습
coefficients[ad_type] = model.coef_[0] # 회귀 계수 : y = aX + b 에서 a값
intercepts[ad_type] = model.intercept_ # 절편 : b값
# 광고비 설정 (여기에서 원하는 광고비를 변경할 수 있음)
# 각 광고 유형별로 예상 광고비를 설정하고, 이를 바탕으로 예측된 매출을 구할 것.
sns_budget = 40 # SNS 광고비 (만원)
search_budget = 50 # 검색 광고비 (만원)
banner_budget = 13 # 배너 광고비 (만원)
# 예측된 매출 계산
# 각 광고비가 주어진 값에 대해, 앞서 구한 회귀 계수와 절편을 사용해서 매출을 예측하는 부분.
# sns_sales, search_sales, banner_sales는 각각 SNS, 검색, 배너 광고에 대한 예측 매출액.
sns_sales = coefficients["SNS 광고비"] * sns_budget + intercepts["SNS 광고비"]
search_sales = coefficients["검색 광고비"] * search_budget + intercepts["검색 광고비"]
banner_sales = coefficients["배너 광고비"] * banner_budget + intercepts["배너 광고비"]
# 예측된 매출의 평균 계산
# 각 광고비별로 예측된 매출을 합산하여 평균값을 계산
predicted_sales = (sns_sales + search_sales + banner_sales) / 3
# 예측 결과 출력
# 광고비 설정 및 예상 평균 매출액 출력, 각 광고 유형별로 예측된 매출도 출력
print(f"광고비 설정: SNS={sns_budget}만원, 검색={search_budget}만원, 배너={banner_budget}만원")
print(f"예상 평균 매출액: {predicted_sales:.2f} 만원")
print(f"SNS 광고비 : {sns_sales}")
print(f"검색 광고비 : {search_sales}")
print(f"배너 광고비 : {banner_sales}")
- 회귀 계수는 각 광고비가 매출에 미치는 영향을 나타냄.
- 예를 들어, SNS 광고비가 1만원 증가하면 매출이 얼마나 증가할지 알 수 있음.
- 절편은 광고비가 0일 때 예상되는 매출.
- 즉, 광고비가 없더라도 기본적으로 예상되는 매출을 알려줌.
- 각 광고 유형별 회귀 계수를 분석하면, 광고비를 조절했을 때 매출이 얼마나 변하는지 예측 가능.
- 다중 회귀 분석을 통해 각 광고비가 매출에 미치는 영향을 확인 가능.
결과

- 각 광고 유형별 예측 매출
SNS 광고로 기대되는 매출 220만원,
검색 광고로 기대되는 매출 220만원,
배너 광고로 기대되는 매출 193.56만원
예상 평균 매출액 (220 + 220 + 193.56) / 3 = 211.19만원
결과적으로 SNS 광고와 검색광고는 각각 220만원의 매출을 기대할 수 있지만 배너 광고는 193.56만원으로 상대적으로 낮은 매출 예상 (즉, 배너 광고는 효과가 상대적으로 떨어질 가능성이 있음)
- 최적의 광고비 배분 전략
SNS 광고와 검색광고는 효과가 비슷하므로 예산을 적절히 나누는 것이 좋음
배너 광고는 효과가 낮으므로 예산을 줄이고 SNS 또는 검색광고에 집중하는 것이 매출 상승에 유리할 수 있음.


예제 4: 고객 이탈 예측 (로지스틱 회귀 활용)
- 로지스틱 회귀란?
로지스틱 회귀는 어떤 결과가 특정 범주(예/아니오, 성공/실패, 합격/불합격 등)에 속할 확률을 예측하는 분석 기법.
ex)
환자가 질병에 걸릴 가능성이 있을까?
이메일이 스팸일까, 아닐까?
이런 식으로 결과가 '참/거짓' 또는 '1/0' 같은 이진(두 가지) 값으로 분류되는 문제를 해결할 때 사용.
(광고 클릭 여부, 이메일 스팸 여부, 고객 이탈 여부 분석 등)
비교 항목 | 선형 회귀 | 로지스틱 회귀 |
출력값 | 연속적인 숫자 (예: 매출, 온도) | 0~1 사이의 확률값 |
예측목표 | 숫자 예측 (회귀 문제) | 특정 클래스 분류 (분류 문제) |
사용예시 | 광고비 → 매출 예측 | 광고 클릭 여부 (Yes/No) |
예제4 시나리오
- 고객의 서비스 사용 데이터를 기반으로 이탈 가능성을 예측.
- 로지스틱 회귀를 사용하여 고객 유지(1) 또는 이탈(0) 여부를 분석.
코드 (고객의 사용기간이 증가할수록 이탈할 확률이 어떻게 변하는지 분석하는 로지스틱 회귀 모델)
# 라이브러리 가져오기
# numpy: 숫자 데이터 배열 다룰 때 사용
# matplotlib.pyplot: 그래프 그릴 때 사용
# sklearn.linear_model.LogisticRegression: 로지스틱 회귀 모델 만들 때 사용
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression
# 고객의 사용 기간(월)과 이탈 여부(1: 유지, 0: 이탈) 데이터를 만듦
usage_period = np.array([1, 3, 5, 7, 9, 11, 13, 15]).reshape(-1, 1)
churn_status = np.array([0, 0, 0, 1, 1, 1, 1, 1])
# 로지스틱 회귀 모델 생성 및 학습
# 고객의 사용기간을 기반으로 이탈 여부를 예측하는 로지스틱 회귀 모델을 학습함
# fit(사용 기간, 이탈 여부)를 하면 머신러닝 모델이 패턴을 학습
model = LogisticRegression() # 모델 생성
model.fit(usage_period, churn_status) # 모델 학습
# 고객 이탈 예측 확률 계산
# 각 사용 기간별 이탈 확률을 예측함
# predict_proba() → 확률을 출력함
# [:, 1] → 이탈(1)의 확률만 가져옴
predicted_probs = model.predict_proba(usage_period)[:, 1]
# 그래프로 시각화
# 실제 데이터와 예측된 확률을 그래프로 시각화
# 파란점: 실제 데이터 (고객이 유지(0)했는지, 이탈(1)했는지)
# 빨간선: 로지스틱 회귀가 예측한 이탈 확률 곡선
plt.scatter(usage_period, churn_status, color='blue', label='Actual Data')
plt.plot(usage_period, predicted_probs, color='red', linewidth=2, label='Logistic Regression')
plt.xlabel('Usage Period (Months)')
plt.ylabel('Churn Probability')
plt.title('고객 이탈 확률 예측')
plt.legend()
plt.show()
# 로지스틱 회귀의 계수(가중치)와 절편을 출력함
# model.coef_[0][0] → 사용 기간이 이탈 확률에 미치는 영향력(기울기)
# model.intercept_[0] → 절편(기본 이탈 확률)
print(f"회귀 계수: {model.coef_[0][0]}")
print(f"절편: {model.intercept_[0]}")
결과

사용 기간이 길어질수록 이탈 확률이 증가하는 걸 확인할 수 있음.
파란 점: 실제 데이터 (고객이 유지(0)했는지, 이탈(1)했는지),
7개월 이후부터 대부분의 고객이 이탈(1) 한 걸 확인할 수 있음.
빨간 선: 로지스틱 회귀가 예측한 이탈 확률 곡선
사용 기간이 길어질수록 이탈 확률이 증가하는 S자 형태
10개월 이후부터 이탈 확률이 거의 1에 수렴 → 대부분 이탈한다는 의미
회귀 계수(0.9618)의 의미 :
X(사용 기간)가 1개월 증가할 때, 이탈 확률이 증가하는 정도
값이 클수록 이탈 여부에 사용 기간이 더 강한 영향을 미친다는 의미
절편(-5.7687)의 의미 :
(사용 기간)가 0일 때(즉, 고객이 서비스를 처음 사용할 때) 이탈 확률이 매우 낮음
결론적으로 7개월 이전까지 이탈률이 낮으므로, 이 시기에 고객을 유지할 전략을 세워야 함.
예제 5: 할인 캠페인 효과 분석 (T-검정 활용)
- T-검정 이란?
두 그룹 간 평균 차이가 통계적으로 유의미한지 검정하는 통계 기법
두 그룹의 평균 차이가 우연히 발생한 것이 아니라 실제로 의미 있는 차이인가를 확인
독립 표본 T-검정(서로 다른 두그룹 비교),
대응 표본 T-검정(같은 그룹의 처리 전후 비교),
일표본T-검정(한 그룹의 평균이 특정 값과 차이 나는지 비교)이 있음.
p-value < 0.05면 유의미한 차이가 있다고 판단!
예제5 시나리오
- 특정 할인 프로모션을 받은 고객과 받지 않은 고객의 평균 구매 금액 차이를 분석.
- 두 그룹 간 평균 차이가 유의미한지 T-검정을 수행.
코드 (할인 프로모션이 고객의 평균 구매 금액에 유의미한 영향을 주는지를 검정하는 독립표본 T-검정 코드)
# scipy.stats : T-검정을 할 수 있게 도와주는 라이브러리 (통계 분석을 위한 모듈)
from scipy import stats
# 할인 프로모션을 받은 그룹 (평균 구매 금액)
discount_group = [50, 55, 60, 62, 65, 70, 75, 80]
# 할인 프로모션을 받지 않은 그룹 (평균 구매 금액)
no_discount_group = [40, 45, 48, 50, 52, 55, 57, 60]
# 독립표본 T-검정 수행
# stats.ttest_ind() → 서로 독립적인 두 그룹의 평균 차이를 비교하는 T-검정 함수
# t_stat → T-검정 통계량 (두 그룹의 차이가 얼마나 큰지 나타냄)
# p_value → p-값 (유의미한 차이가 있는지 확인하는 값)
t_stat, p_value = stats.ttest_ind(discount_group, no_discount_group)
# T-검정 통계량과, P-값 출력
print(f"T-검정 통계량: {t_stat}")
print(f"P-값: {p_value}")
# p-value가 0.05보다 작은지 아닌지에 따라 유의미한 차이가 있는지 여부를 결정
if p_value < 0.05:
print("귀무가설 기각: 할인 캠페인이 평균 구매 금액 증가에 유의미한 영향을 줌")
else:
print("귀무가설 채택: 할인 캠페인이 평균 구매 금액에 유의미한 차이를 만들지 않음")

T-검정 통계량 (T-statistic):
이 값은 두 그룹이 얼마나 차이가 나는지 나타내는데, 3.24라는 값은 두 그룹의 평균 차이가 꽤 크다는 것. 즉, 할인 프로모션을 받은 그룹과 받지 않은 그룹이 평균적으로 다르다는 것을 보여줌.
P-값 (P-value):
P-값은 결과가 우연히 발생할 확률.
0.0059로 나왔으므로 귀무가설을 기각.
할인 프로모션이 평균 구매 금액에 유의미한 영향을 미쳤다는 결론을 낼 수 있음.
기술통계 예제
1) 데이터 생성 및 요약
import numpy as np
import pandas as pd
# 가상의 데이터 생성
data = [60, 70, 80, 80, 90, 100, 95, 85, 75, 65]
# 데이터프레임 생성
df = pd.DataFrame(data, columns=["점수"])
# 기술통계 요약
print(df.describe()) # 평균, 표준편차, 최솟값, 중앙값, 최댓값 등 출력
2) 중심 경향 측정
mean_value = np.mean(data) # 평균
median_value = np.median(data) # 중앙값
mode_value = pd.Series(data).mode().values # 최빈값
print(f"평균: {mean_value}")
print(f"중앙값: {median_value}")
print(f"최빈값: {mode_value}")
3) 산포도 측정
variance_value = np.var(data, ddof=1) # 분산 (모표본 사용)
std_dev_value = np.std(data, ddof=1) # 표준편차
range_value = np.max(data) - np.min(data) # 범위
iqr_value = np.percentile(data, 75) - np.percentile(data, 25) # 사분위 범위, IQR(사분위 범위) 계산 → 데이터의 중앙 50%가 차지하는 범위를 나타냄.
print(f"분산: {variance_value}")
print(f"표준편차: {std_dev_value}")
print(f"범위: {range_value}")
#IQR (Interquartile Range, 사분위 범위)는 데이터의 중앙 50%를 나타내는 범위로, 데이터 분포의 변동성을 측정하는 데 사용
print(f"사분위 범위: {iqr_value}")
4) 데이터 시각화
import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(12, 5))
# 히스토그램
plt.subplot(1, 2, 1)
sns.histplot(data, bins=5, kde=True)
plt.title("히스토그램")
# 박스플롯
plt.subplot(1, 2, 2)
sns.boxplot(y=data)
plt.title("박스플롯")
plt.show()
추론통계 예제
1) 가설검정 (T-검정)
from scipy import stats
# 두 집단 데이터 예시
group1 = [80, 85, 88, 90, 95] # 첫 번째 집단 데이터
group2 = [70, 75, 78, 80, 85] # 두 번째 집단 데이터
# 독립표본 T-검정 (두 집단 평균 비교)
t_stat, p_value = stats.ttest_ind(group1, group2)
print(f"T-검정 통계량: {t_stat}")
print(f"P-값: {p_value}")
if p_value < 0.05:
print("귀무가설 기각: 두 집단 간의 평균 차이가 통계적으로 유의미함")
else:
print("귀무가설 채택: 두 집단 간의 평균 차이가 없음")
※ T-검정을 사용할 때 주의할 점
- 정규성 검정(Normality Test) 필요
- T-검정은 데이터가 정규 분포를 따른다고 가정하므로, 데이터를 분석하기 전에 정규성 검정(Kolmogorov-Smirnov test, Shapiro-Wilk test 등)을 수행하는 것이 좋다.
- 등분산성 검정(Homogeneity of Variance) 필요
- 두 집단의 분산이 동일한지 확인해야 한다. 분산이 다를 경우 웰치의 T-검정(Welch's T-Test)을 사용하는 것이 적절.
- 샘플 크기 고려
- 샘플 크기가 작을 경우 정규성 가정을 위반할 수 있으므로 비모수 검정(예: Mann-Whitney U Test)을 고려할 수 있다.
2) 신뢰구간
import scipy.stats as st
# 신뢰구간 95% 계산
confidence_level = 0.95
mean = np.mean(data)
std_error = stats.sem(data) # 표준오차
margin_of_error = std_error * st.t.ppf((1 + confidence_level) / 2, len(data) - 1)
lower_bound = mean - margin_of_error
upper_bound = mean + margin_of_error
print(f"95% 신뢰구간: ({lower_bound:.2f}, {upper_bound:.2f})")
3) 회귀분석
import statsmodels.api as sm
# 독립변수(광고비)와 종속변수(판매량) 예제 데이터
X = np.array([1, 2, 3, 4, 5]) # 광고비(독립변수)
Y = np.array([3, 6, 7, 8, 11]) # 판매량(종속변수)
# 상수항 추가
X = sm.add_constant(X)
# 선형 회귀 모델 학습
model = sm.OLS(Y, X).fit() # OLS라는 모델이 따로 있음.(statsmodels 라이브러리에 있는 모델)
# 회귀 분석 결과 출력
print(model.summary())
- R-squared가 중요 (1이 최대값) : 성능을 보려면 얘를 보면 된다. 회귀일 경우에 예측 정확도를 본다.
4) 상관관계 분석
# 두 변수 간의 상관계수 계산
correlation_coefficient, p_value = stats.pearsonr(X[:, 1], Y)
print(f"상관계수: {correlation_coefficient}")
print(f"P-값: {p_value}")
if p_value < 0.05:
print("두 변수 간 상관관계가 통계적으로 유의미함")
else:
print("두 변수 간 상관관계가 통계적으로 유의미하지 않음")
5) 데이터 시각화 - 산점도
plt.figure(figsize=(6, 4))
plt.scatter(X[:, 1], Y, color='blue', label='실제 데이터')
plt.plot(X[:, 1], model.predict(X), color='red', label='회귀선')
plt.xlabel("광고비")
plt.ylabel("판매량")
plt.title("광고비와 판매량의 관계")
plt.legend()
plt.show()
확률분포 예제
1) 정규분포 시뮬레이션 ☆ - 평균을 중심으로 대칭적인 종모양의 분포
# 평균이 0, 표준편차가 1인 정규분포 데이터 생성
# np는 numpy
# random → 랜덤데이터
# (0, 1, 1000)은 순서대로 (평균, 표준편차, 데이터 개수)
normal_data = np.random.normal(0, 1, 1000)
# 히스토그램 그리기
sns.histplot(normal_data, bins=30, kde=True) # bin는 막대기 개수
plt.title("정규분포")
plt.show()
2) 이항분포 시뮬레이션 - 두가지 결과 (성공/실패)로 구성된 실험에서 성공 횟수를 나타내는 분포
# 성공 확률이 0.5인 베르누이 시행을 100번 반복
binomial_data = np.random.binomial(n=10, p=0.5, size=1000)
# 히스토그램 그리기
sns.histplot(binomial_data, bins=10, kde=False)
plt.title("이항분포")
plt.show()
3) 포아송 분포 시뮬레이션 - 일정한 시간동안 특정 사건이 발생하는 횟수를 모델링하는 분포
# 평균 발생 횟수가 3인 포아송 분포 데이터 생성
poisson_data = np.random.poisson(lam=3, size=1000)
# 히스토그램 그리기
sns.histplot(poisson_data, bins=10, kde=False)
plt.title("포아송 분포")
plt.show()
확률의 기본 개념
확률은 특정 사건이 발생할 가능성을 수학적으로 나타낸 값. 확률값은 0에서 1 사이의 값을 가지며, 1에 가까울수록 해당 사건이 발생할 가능성이 높음을 의미.
- 확률(P): 사건이 일어날 가능성 (0 ≤ P(A) ≤ 1)
- 표본 공간(Sample Space, S) ☆ : 가능한 모든 경우의 집합
- 사건(Event, E): 관심 있는 결과들의 집합
확률 계산법
1) 고전적 확률 (Classical Probability)
- 모든 경우가 동일한 확률을 가질 때 사용
- 예: 동전을 던질 때 앞면이 나올 확률 = 1/2
2) 경험적 확률 (Empirical Probability)
- 실제 데이터를 기반으로 계산
- 예: 과거 데이터를 통해 비 오는 날의 확률을 추정
3) 조건부 확률 (Conditional Probability)
- 특정 사건이 발생했을 때 다른 사건이 발생할 확률
- 예: 어떤 사람이 감기에 걸렸을 때, 병원을 방문할 확률
이중에서 우리가 쓰는 것은 경험적 확률과 조건부 확률이다.
'데이터 분석 part' 카테고리의 다른 글
상관관계의 이해, 상관분석 / 웹시스템 이용한 마케팅 데이터 획득 이해 (0) | 2025.02.25 |
---|---|
회귀분석 (단순회귀분석과 다중회귀분석) (1) | 2025.02.25 |
EDA (탐색적 데이터 분석) (0) | 2025.02.20 |
그로스 마케팅에서의 그래프 사용, 데이터 변환의 중요성 (0) | 2025.02.19 |
Pandas 복습과 설문조사 개요, 설문조사 후 데이터 분석, 시각화 (2) | 2025.02.18 |