[패스트캠퍼스 환급챌린지]딥러닝/Chapter 1. 통계

[패스트캠퍼스][환급 챌린지]Chapter 1. 딥러닝을 위한 통계 01-07 결합확률과 주변확률

포리셔 2023. 2. 26. 20:35

01-07 결합확률과 주변확률

독립

def) 독립(Independent): 두 변수가 서로 영향을 주지 않음을 의미
지난 포스트에서 독립변수가 다른 변수에 영향을 받지 않는 (사람이 바꿀 수 있는) 변수라고 설명했었죠? 이 설명을 거꾸로 말하면 서로 다른 변수가 서로에게 영향을 주지 않는다면 그 변수들은 서로 독립이라고 합니다.
실생활에서 독립의 여러 예시를 볼 수 있습니다. 예를 들어서, A와 B라는 두 사람이 가위바위보를 해서 A가 세 번을 내리 졌다고 해봅시다.(두 사람이 가위, 바위, 보 중에서 각각 뭘 냈는지는 고려하지 않습니다.) 보통 이쯤되면 사람 머릿속에서는 희망회로가 가열차게 돌아가기 시작합니다. A 입장에서는 '4연패는 안 된다! 이번에는 최소한 비기기라도 하겠지!'라면서 패배할 경우를 아예 배제해버리고, 반대로 B 입장에서는 '두 번 일어난 일은 세 번도 일어난다. 네 번이라고 안 일어나랴!'라면서

오늘은 나의 날

자신의 승리를 예상합니다. 정말 그럴까요?
냉정하게 생각해서 여러 번 가위바위보를 한다고 했을 때, 이전 시행이 다음 시행에 영향을 주지는 않습니다. 앞서 A와 B가 행복회로를 돌린 것도 확률적인 관점에서 보면 잘못된 접근이라고 볼 수 있겠죠. 따라서 가위바위보를 몇 번이나 하건 간에, 각 가위바위보 시행은 서로 영향을 주지 않는 독립이라고 할 수 있습니다.

하지만 누가 뭘 자주 내느냐의 패턴을 파악했다면 그건 다른 얘기

def) 종속(Dependent): 한 변수가 다른 변수에 영향을 줌을 의미
반대로 종속은 서로 다른 변수끼리 영향을 줌을 의미합니다. 여기에는 반드시 일어나는 인과관계 뿐만 아니라, 그 경향성만을 보는 상관관계 에도 포함됩니다. 학창 시절에 공부 잘하는 친구들 보면 국어도 잘하고 수학도 잘하고 영어도 잘하는

세상 혼자 사는

친구들 한 명씩 있잖아요? 사실 사람마다 가진 능력에 차이 때문에 누구는 국어가 조금 약하고, 누구는 수학만큼은 항상 최상위권인 경우가 있느니만큼 엄밀히 말하면 각 과목의 점수는 독립이라고 보는 게 맞을지도 모릅니다. 하지만 실상 성적표를 받아보면 공부 잘 하는 친구들은 거의 모든 과목을 다 잘 해냅니다. 그래서 실제로 산점도(scatterplot)를 그려보면 비슷한 경향을 나타내는 직선을 따라가게 마련입니다. 대략적으로만 그려놓자면 아래와 같겠군요.

배반사건 vs. 독립사건

def) 배반사건 (Exclusive Event): 동시에 일어나지 않는 사건
독립사건: 동시에 일어날 때 서로 영향을 주지 않는 사건
자주 헷갈리는 개념으로 배반과 독립의 정의가 있습니다. 독립이 확률 의 개념인 반면, 배반사건은 시행 의 개념으로 접근해야 합니다. 어떤 두 사건 $X$와 $Y$에 대해서 배반사건과 독립사건은 각각 아래와 같이 표현됩니다.
$$X\cap Y=0$$
$P\left(Y|X\right)=P\left(Y\right)$$
배반사건은 아예 두 사건이 동시에 일어나지 않을 때를 말하고, 독립사건은 두 사건이 동시에 일어날 때, 그 사건이 발생할 확률은 서로 영향을 주고받지 않는다는 뜻입니다.

다변수 확률변수

def) 다변수 확률변수 (Multivariate Random Variable): 확률변수가 두 개 이상 있는 경우를 의미.
여러 가지 변수를 한꺼번에 고려해야 할 때, 다변수 확률변수를 적용합니다. 이 때 우리는 여러 확률변수 중 한 가지씩만 선택해서 각각의 영향을 볼 수도 있고, 반대로 여러 개 묶어서 서로의 영향을 알아볼 수 있습니다. 예를 들어, 학생의 학업성취도를 평가할 때 수학 성적, 국어 성적, 영어 성적, 과학 성적 등 여러 가지 성적을 종합적으로 고려할 때, 수학 성적의 영향만 떼어놓고 볼 수도 있고, 모든 성적을 다 묶어서 영향을 볼 수도 있습니다.

결합확률

def) 결합확률 (Joint Probability): 두 사건이 동시에 일어날 확률
두 개 이상의 사건이 동시에 일어날 때 결합확률이라고 말합니다. 이 확률은 두 확률변수의 교집합이 발생할 확률입니다. 이름에서 알 수 있듯이 이 친구도 '확률'이기 때문에 0에서 1 사이의 값을 가지며, 표기할 때는 보통 $P\left(X, Y\right)$ 또는 $P\left(X\cap Y\right)$로 표기합니다. 이를 함수 형태로 나타내면 결합확률함수(Joint probability function)라고 부릅니다.
어떤 두 이산 확률변수 $X$, $Y$에 대한 결합확률함수는 다음과 같이 정의합니다.
$$f_{XY}\left(x_i, y_j\right)=P\left(X=x_i, Y=y_j\right)=P_{XY}\left(x,y\right)$$
혹은, $X$, $Y$의 결합확률분포라는 것을 알고 있다면 편의상 $f\left(x, y\right)$라고만 적기도 합니다. 확률분포의 성질에 따라 $X$와 $Y$가 가진 범위에서 결합확률함수의 총합은 1입니다.
$$\sum_i \sum_jP\left(X=x, Y=y\right)=1$$
이산확률변수의 확률분포를 나타낼 때 확률질량함수를 썼듯이, 둘 이상의 이산확률변수의 확률분포를 나타내는 함수는 결합확률질량함수(Joint probability mass function)라고 합니다.

주변확률질량함수

def) 주변확률질량함수(Marginal Probability Mass Function): 두 확률변수 중 하나의 확률변수에 대해서만 확률분포를 나타낸 함수
앞서 다변수 확률변수는 여러 확률변수 중 한 가지씩만 택해서 그 영향을 볼 수도 있다고 했습니다. 여기에 해당하는 것이 주변확률질량함수입니다. 확률변수가 $X$, $Y$ 두 개일 때 각각의 확률변수에 대해서만 주변확률질량함수를 정의하면 아래와 같습니다.
$$P_X\left(x\right)=\sum_{y_i}P_{XY}\left(x, y_i\right)$$
$$P_Y\left(y\right)=\sum_{x_i}P_{XY}\left(x_i, y\right)$$

위에서 수학 등급이 1등급일 확률 $P_X\left(1\right)$는 다음과 같이 나타납니다.
$$P_X\left(1\right) = P_{XY}\left(1,1) + P_{XY}\left(1,2) + P_{XY}\left(1,3), P_{XY}\left(1,4), P_{XY}\left(1,5)$$

이를 풀어서 설명하면, $X=1$로 고정한 후, 모든 $Y$에 대한 확률의 합입니다. 이와 같은 방식으로 다른 모든 $X$ 값에 대해서도 확률을 구한뒤 표현하면, 주변확률질량함수가 됩니다.

파이썬에서의 예시

import pandas as pd

scores = [1, 2, 3, 4, 5]
data = [[2, 1, 0, 0, 0],
        [1, 3, 4, 0, 0],
        [1, 3, 5, 2, 0],
        [0, 0, 0, 3, 2],
        [0, 0, 0, 1, 2]]

df = pd.DataFrame(data, index=scores, columns=scores)
df.columns.name = 'X'
df.index.name = 'Y'
pmf = df / df.values.sum()
print(pmf)

강의에서 예시로 든 파이썬 코드는 위와 같습니다. 수학 성적 등급이 $X$이고, 영어 성적 등급이 $Y$일 때 수학 등급이 $x$, 영어 등급이 $y$일 확률을 구해줍니다. 표 형태로 나타나는 데이터이기 때문에 Pandas(판다스) 라이브러리를 이용해 데이터프레임을 구성해서 재현했습니다. pmf가 결합확률질량함수에 해당하는 변수입니다. 그리고 실제로 실행시키면 아래와 같습니다.

X         1         2         3         4         5
Y                                                  
1  0.066667  0.033333  0.000000  0.000000  0.000000
2  0.033333  0.100000  0.133333  0.000000  0.000000
3  0.033333  0.100000  0.166667  0.066667  0.000000
4  0.000000  0.000000  0.000000  0.100000  0.066667
5  0.000000  0.000000  0.000000  0.033333  0.066667

숫자로만 봐서는 직관적으로 이해가 잘 안 될 수도 있으니 Seaborn(시본) 라이브러리를 이용해 히트맵(heatmap)을 그려서 이해를 도와줍니다. 확률이 클수록 흰색에 가까워지고, 0에서는 완전히 검은색이 됩니다.

import matplotlib.pyplot as plt
import seaborn as sns

sns.set(font_scale=2)
plt.rcParams["figure.figsize"] = [20, 16]
ax = sns.heatmap(pmf, annot=True,
    xticklabels=[1, 2, 3, 4, 5], yticklabels=[1, 2, 3, 4, 5])
plt.title("Heatmap", fontsize=40)
plt.show()

이번에는 주변확률질량함수도 표현해 보겠습니다. 강의 예제에서는 $Y=1$인 경우의 $X$에 대한 주변확률질량함수를 구했습니다.

index = 0
x = [0, 1, 2, 3, 4]
plt.figure(figsize=(6,6))
plt.bar(x, pmf.iloc[index])
plt.xticks(x, ["1", "2", "3", "4", "5"])
plt.title(f"P(X, Y={index+1})", fontsize=20)
plt.show()

추가로 $X$와 $Y$ 각각에 대한 주변확률질량함수는 다음과 같이 구할 수 있습니다. 각 함수에서 axis 키워드는 0일 때 행 방향, 1일 때 열 방향으로 연산합니다.

marginal_pmf_x = pmf.sum(axis=0)
marginal_pmf_y = pmf.sum(axis=1)
print(marginal_pmf_x)
print(marginal_pmf_y)
X
1    0.133333
2    0.233333
3    0.300000
4    0.200000
5    0.133333
dtype: float64
Y
1    0.100000
2    0.266667
3    0.366667
4    0.166667
5    0.100000
dtype: float64

7일차 후기

1주일 치 미션은 이렇게 끝났습니다. 미션도 미션이지만 공부하는 습관 잡는 게 역시 쉬운 일이 아님을 느끼며... 이번 주 미션을 마무리하러 가봅니다. 근데 이렇게 했는데 미션 실패 뜨면 어쩌지...??

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.