728x90
반응형

1. 기술통계학 & 추측통계학

 

기술통계학 : 이미 발생한 사건들에 관한 자료 수집 및 요약에 중점

 

추측통계학 : 미래에 어떤 사건이 발생할 가능성을 계산

 

==> 모집단으로부터 추출된 표본에서 얻은 정보를 이용하여 모집단의 알려지지 않은 정보를 추론

 

==> 추론에는 항상 불확실성 존재!

 

==> 확률은 추측통계학의 기본

 

2. 고전적 확률(Classical Probability)

 

==> 개개의 표본점들이 나타날 가능성이 거의 동등!

 

P(A) =  (사건 A의 표본점 개수) / (표본공간 S 안의 표본점 개수)

 

EX) 동전 3번 던지는 게임에서 앞면이 2번 나올 확률

 

A = ['H' , 'T']
j = 0
ratio = list(itertools.product(A , repeat = 3))
for i in range(len(ratio)):
    a = collections.Counter(ratio[i]).most_common()
    b = list(filter(lambda x : x[0] == 'H' and x[1] ==2 , a))
    if len(b)>0:
        j+=1
        print(b)
print(j/len(ratio))

==> most_common() 함수!!!! 리스화 ==> filter 함수를 사용하자!!

 

[('H', 2)]
[('H', 2)]
[('H', 2)]
0.375

 

3. 경험적 확률(Empirical Probability)

 

P(A) = (사건 A의 도수) / (총 관찰 도수)

 

EX) 45시간 이하로 인터넷 사용할 확률

 

dosu = [4,6,13,16,10,0,1]

A = pd.DataFrame({'계급간격' : a , '계급값' : b , '도수' : dosu})
A= A.set_index('계급간격')
A

확률_1

B = A[A['계급값'] <=45]
print(float(B['도수'].sum(axis=0)) / (A['도수'].sum(axis=0)))

==> DataFrame 조건식 할때는 대괄호 안에 넣기!

0.78

 

b = A['상대도수'].tolist()
for i in range(1, len(b)):
    b[i] = b[i-1] + b[i]
A['누적상대도수'] = b
A

==> 누적상대도수 구하는 공식 그냥 for문 활용

 

누적상대도수 그래프

n = [10, 50, 100, 500, 1000, 5000 , 10000 , 50000]
coin = ['H' , 'T']
res = []
for j in n:
    k=0
    for i in range(j):
        if random.randint(0,1) == 1:
            k+=1
    res.append(k)
res

A = pd.DataFrame({"던진횟수" : n , '앞면의 수' : res})
A['던진 횟수에 대한 앞면 수의 비율'] = A['앞면의 수'] / A['던진횟수']
A

res ==> 앞면이 나온 횟수

 

==> 알고리즘 더 짤 수 있는거 있을지 고민해보자

시뮬레이션

fig = plt.figure(figsize=(8,8)) #plt는 matplotlib의 약자
fig.set_facecolor('white')
x = A['던진횟수']
y = A['던진 횟수에 대한 앞면 수의 비율']
ax = sns.lineplot(x=x, y=y,
                  color='r', # 색상
                  linestyle='-', # 라인 스타일
                  marker='o') # 마커
#ax 변수에 저장
ax.set_title('시뮬레이션')
ax.set_xlabel('던진횟수', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel('앞면의 비율' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)

로그를 취하지 않은 x축 시뮬레이션

★ X축에 대한 로그 스케일 적용

 

==> ax.set_xscale('log') ==> X축 로그 변환!!

fig = plt.figure(figsize=(15,8)) #plt는 matplotlib의 약자
fig.set_facecolor('white')
x = A['던진횟수']
y = A['던진 횟수에 대한 앞면 수의 비율']
ax = sns.lineplot(x=x, y=y,
                  color='r', # 색상
                  linestyle='-', # 라인 스타일
                  marker='o') # 마커
ax.set_xscale('log')
ax.set_xticks(x)
ax.set_yticks([0.1 , 0.2, 0.3 , 0.4 ,0.5 , 0.6 ,0.7])
#ax 변수에 저장
ax.set_title('시뮬레이션')
ax.set_xlabel('던진횟수', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel('앞면의 비율' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)

로그 스케일 취한 시뮬레이션 그래프

fig = plt.figure(figsize=(15,8)) #plt는 matplotlib의 약자
fig.set_facecolor('white')
x = A['던진횟수']
y = A['던진 횟수에 대한 앞면 수의 비율']
ax = sns.lineplot(x=x, y=y,
                  color='r', # 색상
                  linestyle='-', # 라인 스타일
                  marker='o') # 마커
ax.set_xscale('log')
ax.set_xticks(x)
ax.set_yticks([0.1 , 0.2, 0.3 , 0.4 ,0.5 , 0.6 ,0.7])
#ax 변수에 저장
ax.set_title('시뮬레이션')
ax.set_xlabel('던진횟수', fontsize = 15 , fontweight = 'bold')
ax.set_ylabel('앞면의 비율' , fontsize = 15 , fontweight = 'bold' , rotation = 0 , labelpad=25)
ax.set_xticklabels(x, fontsize=15) #set_xticklabels(축별 이름 , font 크기)

ax.axhline(y=0.5 , xmin=0 , xmax=1 , color = 'blue' , linestyle ='--' , label ='{}'.format(0.5))
# 수평선!!!
ax.text(25000 , 0.51  , f'확률 : {(0.5)}',fontsize=13)

#점선의 위치 지정!!

==> 수평선 axhline() 기억하자!!!!

수평선 적용

 

4. 대수법칙(Law of Large Numbers)

 

==> 어떤 사건이 나타날 경험적 확률은 실험을 반복할 수록 고전적 확률에 가까워진다!

 

 EX) 반지름 길이 20cm 다트 원판 ==> 중앙에 반지름의 길이가 4cm 인 원이 그려져 있다. 

==> 다트를 던져 중앙에 있는 원 안에 맞힐 확률

 

==> 원판 넓이 : 20**2ㅠ = 400ㅠ

==> 중앙 원 넓이 : 4**2ㅠ = 16ㅠ

 

==> 16ㅠ / 400ㅠ = 1/25 = 0.04

 

5. 주관적 확률(Subjective Probability)

 

==> 사건이 나타날 가능성을 결정짓는 사람의 개인적인 직관이나 경험에서 우러난 추측이나 추정에 의해 정해진 확률

 

출처 :  [쉽게 배우는 생활속의 통계학]  [북스힐 , 이재원] 

※혼자 공부 정리용

728x90
반응형

+ Recent posts