PyMC3에서 바이스 추론 입문

개요


베이즈 추론을 할 수 있는 아이디어 설명과 그 파이썬 라이브러리 파이MC3로 예제를 풀어본다.
예제 등은 이곳의 창고를 참고했다.
https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers

베스의 추론적 생각


예제


당신은 야쿠르의 부원입니다.나는 한 친구를 초대하여 함께 캠핑을 갔다.
다음 결과를 얻었을 때 친구가 초대에 대해 YES를 말할 확률은 얼마나 됩니까?

결실


첫 초대=>NO
2차 요청=>NO
3차 초대=>NO
이때 주파수주의적 생각이라면 친구가 YES를 말할 확률은0/3=0%이다.
한편, 베이스식 아이디어는 신념의 정도에 따라 확률을 나타낸다.
확률을'어떤 일이 얼마나 믿음직한지'를 나타내는 지표로 해석하는 것은 베스주의다.
이 예라면'초대한 친구와 캠핑을 하면 얼마나 신뢰할 수 있을까'로 바꿀 수 있다.(따라서 친구가 YES의 신념을 확고히 말한다면 네 번째 YES를 말할 확률도 100%다.)
그 특징은 모든 사람의 신념(확률)이 다르도록 정의하는 것이다.

Python 라이브러리 PyMC



베이스 추론을 할 수 있는 파이톤 라이브러리입니다.
마코프 체인 몬테카로법(MCC) 알고리즘을 사용하여 수치를 수렴한다.
PyMC3과 PyMC3과 Python 2과 PyMC2가 있지만 PyMC3는 빠르고 2와 3의 패턴 쓰기 차이가 있기 때문에 둘 다 접촉하려면 학습 비용이 필요하기 때문에 기본적으로 PyMC3를 사용하는 것이 좋다.(하지만 책과 보도에 따라 PyMC2만 기술한 경우도 있다)

베이스 추론의 예


1000개의 관측치에서 추정한 후 분포하는데 그 중에서 0 또는 1의 확률은 50%이다.
다음 그림에서 보듯이 실례화pm.Model(), 모델pm.sample()을 정의하여 샘플링을 진행한다.
이 그림은 1000번 샘플링되었다.(약 10분 정도 소요됩니다.)

샘플링 후 분포의 비교


기본적으로 샘플링 수가 많을수록 결과는 더욱 정확해진다.
샘플 수량: 100000

샘플 수량: 1000

이렇게 샘플링 수가 100000회라면 분포의 평균치는 0.499와 정답의 50%에 가깝다.
1000번이면 편차가 상당히 뚜렷하고 분포의 평균치도 0.467로 정답에서 조금 벗어난다.

실제 과제를 해결해 봅시다


나는 실제 현장에서 베스 추론을 어떻게 사용하는지 고려할 것이다.
이번에 저희가 웹 서비스에서 자주 하는 AB 테스트 결과를 토대로 분석한 예입니다.

사이트 A와 B 중 어느 것이 전환에 더 연결됩니까?


처방을 구하다
1. 변환된 시비에 따라 0 또는 1의 2치 관측 데이터 준비
2. 사이트 AB의 전환율의 사전 분포 확인
3. 관측 데이터에 근거하여 사이트 AB의 전환율의 후분포에 대해 샘플링
4. 후분포 차이에 따라 사이트 AB 중 어느 것이 더 쉽게 변환되는지 분석
  • 변환된 시비에 따라 0 또는 1의 2값을 준비하는 관측 데이터
  • 이번에는 사전 데이터를 직접 만들어 볼 거예요.
    사이트 A의 변환율은 5%이고 사이트 B의 변환율은 4%입니다.(따라서 이 분석의 결과로 사이트 A의 전환율이 가장 좋다.)
    관측 데이터를 만들고 확인 데이터의 평균치는 각각 5%와 4%이다.

    2. 사이트 AB의 전환율의 사전 분포 확인
    3. 관측 데이터에 근거하여 사이트 AB의 전환율의 후분포에 대해 샘플링
    이번에는 사전 분포를 0~1의 균등한 분포로 설정한다.
    모델링 후 20000회 샘플링을 실시한다.

    4. 후분포 차이에 따라 사이트 AB 중 어느 것이 더 쉽게 변환되는지 분석

    맨 위의 도표는 사이트 A의 후방 분포로 0.05에 가까운 정확한 값 분포를 나타낸다.
    중간의 도표는 사이트 B의 후방 분포로 0.04에 가까운 정확한 값 분포를 나타낸다.
    맨 아래의 도표는 サイトAの事後分布-サイトBの事後分布의 도표다.
    이 도표는 0보다 작은 면적サイトAがサイトBより悪い確率, 0보다 큰 면적サイトBがサイトAより悪い確率이다.

    따라서 이러한 결론을 얻었다. 사이트 B가 사이트 A보다 버전이 나쁘고(사이트 B가 사이트 A보다 버전이 좋다) 83% 정도의 확률이라고 할 수 있다.

    요약 및 향후


    PyMC3을 사용하여 실제 문제를 분석했습니다.
    이번에 2치의 사전 분포 데이터 분석을 실시했고 다른 확률 분포에 대해서도 모델링을 하여 추론했다.

    좋은 웹페이지 즐겨찾기