본문 바로가기
  • 블랜더 거실
IT인터넷/Python

Python으로 배우는 데이터 분석_확률과 통계 배우기 1일차(210927)

by bandiburi 2021. 9. 18.

○ 사건과 확률의 개념

- 확률 : 여러 가능한 결과 중 하나 또는 일부가 일어날 가능성, 0과 1 사이의 값으로 정의
- 확률의 용어
 ㄴ 실험 또는 시행: 여러 가능한 결과 중 하나가 일어나도록 하는 행위
 ㄴ 표본공간: 실험에서 나타날 수 있는 모든 결과들을 모아둔 집합
 ㄴ 사건: 표본공간의 일부분(부분집합) 사건 A가 일어날 확률: P(A) 또는 Pr(A)
    예) 동전을 던지는 실험; 표본공간 {H,T}, P(A) = 0.5
 ㄴ 추출방법: 복원추출, 비복원추출(앞의 시행이 다음 시행에 영향을 주는 방법)
 ㄴ 확률의 중요 구성요소 : .표본공간, 사건(A), 확률(P)

○ 경우의 수 
- 사건의 기본적인 연산
 ㄴ A의 여사건: 사건 A에 포함되지 않는 집합
 ㄴ A와 B의 합사건 : A or B
 ㄴ A와 B의 곱사건 : A and B
 ㄴ 배반사건 : 동시에 일어날 수 없는 두 사건, A and B = 0인 두 사건

- 경우의 수의 계산
 ㄴ 합의 법칙 : 두 사건 A와 B가 일어나는 경우의 수가 각각 m과 n
     ㄴ  두 사건이 동시에 일어나지 않음 
     ㄴ사건 A 또는 사건 B가 일어나는 경우의 수는 m+n
 ㄴ 곱의 법칙 : 이 때 경우의 수는 m x n

- 팩토리얼(!): 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것, n! = nx(n-1)!
     예) 4명의 학생을 순서대로 세우는 경우의 수는 4!

[실습1] 팩토리얼 정의

def fac(n):
    if n==0 :
        return 1
    else :
        return n*fac(n-1)
print(fac(4))



○ 공리 : 증명을 필요로 하지 않거나 증명할 수 없지만 직관적으로 자명한 정리
- 확률의 공리 : 모든 사건A에 대하여 0<= P(A) <=1, 표본공간에 대해 P=1, 사건 A1 A2...가 서로 배반일 때 사건들이 일어날 전체 확률은 각각의 확률을 더한 것과 같음

- 확률의 정리
. P(Ac) = 1 - P(A)
. P(A or B) = P(A) + P(B) - P(A and B)
. A가 B에 속할 때, P(A) <= P(B)



○ 순열과 조합: 순열은 순서가 있다.

- 순열 : 서로 다른 n개의 원소, 곱의 법칙에 의해 총 가능한 경우의 수 = n개의 서로 다른 원소 중 k개를 선택하여 배열하는 경우의 수, nPk = n*(n-1)*(n-k+1)
예) from itertools import permutations
     list(permutations([n], k))  
예) 10명의 사원 장학퀴즈, 1등, 2등이 서로 다름. 10명 중 2명을 선택하는 경우 10P2 = 10*9가 만들어질 수 있음

[실습2]
from itertools import permutations
from itertools import combinations
# 순열 : 6명 수강생 중 2명에게 순위별 상품을 주는 경우의 수
rank_per = list(permutations(["가","나","다","라","마","바"],2))
rank_per_num = len(rank_per)
print(rank_per)
print(rank_per_num)


-조합: 서로 다른 n개의 원소, 서로 다른 n개의 원소에서 k개를 순서에 상관없이 선택하는 방법
   =nCk = n(n-1)...(n-k+1) / k! = nPk /n! = n! / k!*(n-k)!

[실습3]

from itertools import permutations
from itertools import combinations
# 조합 : 6명 수강생 중 2명에게 순위 상관없이 상품을 주는 경우의 수
rank_com = list(combinations(["가","나","다","라","마","바"],2))
rank_com_num = len(rank_com)
print(rank_com)
print(rank_com_num)


-중복순열 : 서로 다른 n개의 원소 중에서 중복을 허용하여 r개를 뽑아 일렬로 배열하는 경우
   nㅍr = n^r
   예) 동전 1개를 10번 던질 경우 2ㅍ10

[실습4]

from itertools import product
from itertools import combinations_with_replacement
# 중복순열
re_per = list(product(['A', 'B','C','D','E'], repeat = 3))
re_per_num = len(re_per)
print(re_per)
print(re_per_num)


-중복조합: 서로 다른 n개의 대상 중 중복을 허용해 r개를 순서를 고려하지 않고 뽑는 경우
  nHr = n+r-1Cn-r = n+r-1Cr
  nCr=nCn-r


[실습5]

from itertools import product
from itertools import combinations_with_replacement
# 중복조합
re_com = list(combinations_with_replacement(['A','B','C','D','E'], 3))
re_com_num = len(re_com)
print(re_com)
print(re_com_num)



○ 조건부 확률과 독립: 인공지능, NLP

- 조건부 확률 : 특정한 사건의 확률을 구할 때, 다른 사건에 대한 정보가 주어지는 경우, 다른 사건에 대한 정보를 이용하여 확률을 구하므로 기존 확률과 달라질 수 있음.
 ㄴ 정의 : P(A|B) = P(AandB)/P(B), P(AandB)=P(B|A)P(A)

- 독립 : 사건 A와 사건 B 사이에 연관성이 없음 = 사건 B는 A에 아무런 영향을 주지 못함
  = P(A|B)=P(A)
. P(A and B) = P(A) * P(B)
  * 일반적으로 두 사건은 서로 연관성이 있는 경우가 많음, 사건 B는 A에 대한 영향을 줄 수 있음, P(A|B) =!P(A)

[실습6]

import random
answer_Q1andQ2 = 0
answer_Q2 = 0
answer_Q1orQ2 = 0
random.seed(4)
# 함수 정의
def random_answer():
    return random.choice(["A", "B"])
# 30명의 응답 결과
for i in range(30):
    Q1 = random_answer()
    Q2 = random_answer()
    if Q2 == "A":
        answer_Q2 += 1
    if Q2 == "A" and Q1 == "A" :
        answer_Q1andQ2 += 1
    if Q2 == "A" or Q1 == "A" :
        answer_Q1orQ2 += 1

# 조건부 확률과 독립
print( "P(Q1 and Q2 | Q2 ):", answer_Q1andQ2/answer_Q2)
print( "P(Q1 and Q2 | Q1 or Q2 ):", answer_Q1andQ2/answer_Q1orQ2)


○ 확률 분포

- 확률변수 : 각각의 근원사건에 실수값을 대응시킨 함수, X, Y처럼 대문자로 표시, 시행을 하기 전엔 어떤 값을 갖게 될 지 알 수 없다는 불확실성을 표현
  ㄴ P(X=x1)
  ㄴ 표본공간 -> 실수값(앞면의 개수) 0,1,2

- 확률분포
  ㄴ 이산확률변수 : 확률변수의 값의 개수를 셀 수 있는 경우
  ㄴ 확률질량함수 : 어떤 확률변수 x가 갖는 확률을 나타내는 함수, y = f(x): x가 갖는 확률은y, 0<=f(xi) <=1
  ㄴ 종류: 베르누이분포, 이항분포,기하분포, 음이항분포
  ㄴ 연속확률변수 : 확률변수의 값이 연속적인 구간에 속하는 경우
  ㄴ 확률밀도함수 : 어느 구간의 확률이 더 크고 작은 지 나타낼 수 있는 함수를 이용, P(0<=X<=0.1) = m

- 연속확률분포: 확률밀도함수의 조건
  ㄴ mu 평균, sigma 표준편차: 표준정규분포 : mu 0, sigma 1
  ㄴ 종류: 정규분포, 균일분포, 지수분포, 감마분포, 베타분포....

- 누적분포함수 : 확률질량함수의 값을 누적해서 더한 것
  ㄴ F(x) = P(X <=x)라고 표시, 대문자 F로 표시
  ㄴ 이산확률변수의 누적분포함수 F(x) = SIGMA p(y)
  ㄴ 연속확률변수의 누적분포함수 F(x) = INTEGRAL p(y)


[실습7]

from sympy.stats import given, density, Die

## Q1. 6개의 면이 있는 주사위 생성
Die6 = Die('Die6',6)
Die6_dict = density(Die6).dict
print(Die6)
print(Die6_dict)

## Q2. 3 초과의 면만 나오는 조건을 가진 주사위 생성
condi = given(Die6, Die6 > 3)
condi_dict = density(condi).dict
print(condi)
print(condi_dict)ㅎ

728x90
반응형

댓글