카테고리 없음

데이터 분석 트랙 37일차 (25.04.03.) TIL

jjaio8986 2025. 4. 3. 21:04

[목차]

  • 아티클 정리
  • 선택 학습반 과제 코드 정리

 

 


  • 아티클 정리 "A/B 테스트 제대로 이해하기 2 - A/B 테스트를 위한 기초 통계 이해하기"

https://yozm.wishket.com/magazine/detail/1644/

 

A/B 테스트 제대로 이해하기: 2A/B 테스트를 위한 기초 통계 이해하기 | 요즘IT

앞선 글에서 A/B 테스트를 설계하거나 수행할 때 ‘목표를 달성하기 위한 방안으로 A와 B 중 어느 게 더 나은가?’ 뒤에 숨은 진짜 질문에 관해 살펴보았다. 이번 글에서는 이러한 우리의 진짜 질

yozm.wishket.com

  • 요약 : “실험 설계 단계”에서 고려해야 할 것들과 “실험 결과”의 신뢰도

1. A/B테스트의 설계 - “모집단과 표본

 1.1. [설계]모집단과 표본

  - 우리는 ‘전체’[모집단]에 대해서 그 속성과 특징, 미래예측과 같은 모든 정보를 알 수 없다.

  - 우리는 언제나 ‘일부’[표본]에 대한 일부[추측]를 알 수 있다.

  - 통계적 대전제 : ‘일부’에 대한 실험 및 결과는 그 숫자가 충분할 시 그를 통한 ‘전체’ 추측, 추론, 추정이 가능하다.

 

 1.2. [설계]실험과 결과 해석의 기준 #귀무, 대립가설, 양측, 단측검정

  - 우리의 실험 목적은 “실험의 결과로 차이가 생길 것이다.”를 확인하고 싶은 것

  - 그렇기에 실험 이전의 차이가 생기지 않은 평소의 상태를 가정 = 귀무 가설 [가장 기본적인 전제]

  - 실험 이후의 평소의 상태와 차이가 있는 상태를 가정 = 대립가설 [차이의 발생 유무만 확인]

  - 실험 중 비교하는 비교군 사이의 차이가 존재하는지 확인 = 양측 검정

  - 실험 중 비교군 사이의 우열관계를 확인 = 단측 검정

 

 1.3. [설계] 결과의 신뢰도 설정

  - A/B테스트의 결과는 ‘일부’(표본)에 대한 실험을 통해 ‘전체’(모집단)을 ‘추측’한 것이다.

  - 추측에 있어 추측이 유효한지, 공정한지, 정확한지 알기 위해 "A/B테스트"를 설계 시 설계 목적, 이유를 앞서 설정했다.

  - 즉, 목적과 이유에 맞게 설계한 테스트의 판단기준을 확인할 필요가 있다.

  - 신뢰수준 : 우리의 추측을 얼마나 신뢰할 수 있는가? 보통은 95%를 기준(100번 중 95번은 내 추측이 맞다)

  - 실험 설계를 위해 점 추정, 구간 추정, 표준 오차, 신뢰 구간등의 용어가 필요

 

2. [결과 해석] 실험 결과의 신뢰성

  - "P-value" : 실험 후 결과가 나올 것임! 그 결과괎이 극단적 혹은 이상값을 가질 확률! [나의 가설을 지지하지 않을 확률]

흔히 신뢰구간 95%를 설정하며 나머지 5%를 유의수준이라고 한다! P-value는 실제로 실험 결과 상에서 우리가 해석하고자 하는 값과 다른 값이 얼마나 자주 등장하고 주로 어느 부분에 위치하는지를 의미

 2.1. 개요

  - 우리는 ‘전체’[모집단]에 대해서 그 속성과 특징, 미래예측과 같은 모든 정보를 알 수 없다.

  - 우리는 언제나 ‘일부’[표본]에 대한 일부[추측]를 알 수 있다.

  - 통계적 대전제 : ‘일부’에 대한 실험 및 결과는 그 숫자가 충분할 시 그를 통한 ‘전체’ 추측, 추론, 추정이 가능하다.

 2.2. 실험과 결과 해석의 기준 #귀무, 대립가설, 양측, 단측검정

  - 우리의 실험 목적은 “실험의 결과로 차이가 생길 것이다.”를 확인하고 싶은 것

  - 그렇기에 실험 이전의 차이가 생기지 않은 평소의 상태를 가정 = 귀무 가설 [가장 기본적인 전제]

  - 실험 이후의 평소의 상태와 차이가 있는 상태를 가정 = 대립가설 [차이의 발생 유무만 확인]

  - 실험 중 비교하는 비교군 사이의 차이가 존재하는지 확인 = 양측 검정

  - 실험 중 비교군 사이의 우열관계를 확인 = 단측 검정

 2.3. 결과의 신뢰도 설정

  - A/B테스트의 결과는 ‘일부’(표본)에 대한 실험을 통해 ‘전체’(모집단)을 ‘추측’한 것이다.

  - 추측에 있어 추측이 유효한지, 공정한지, 정확한지 알기 위해 "A/B테스트"를 설계 시 설계 목적, 이유를 앞서 설정했다.

  - 즉, 목적과 이유에 맞게 설계한 테스트의 판단기준을 확인할 필요가 있다.

  - 신뢰수준 : 우리의 추측을 얼마나 신뢰할 수 있는가? 보통은 95%를 기준(100번 중 95번은 내 추측이 맞다)

  - 실험 설계를 위해 점 추정, 구간 추정, 표준 오차, 신뢰 구간등의 용어가 필요

 

3. 실험결과의 우연성은 배제할 수 있는가? # 실제 실험 결과 해석

  - "P-value" : 실험 후 결과가 나올 것임! 그 결과가 극단적 혹은 이상값을 가질 확률!

  - 흔히 신뢰구간 95%를 설정하며 나머지 5%를 유의수준이라고 한다! P-value는 실제로 실험 결과 상에서 우리가 해석하고자 하는 값과 다른 값이 얼마나 자주 등장하고 주로 어느 부분에 위치하는지를 의미

  - 정확히 말하자면 우리가 세운 가설1이 실험1의 결과1을 통해 근거를 갖게 된다. 결과1의 우연성, 뒷받침정도를 우리가 가설1 설계 시 세웠던 P-value와 유의수준을 통해 비교하고 확인해야 하는 것!

 

  • 핵심 개념 :

- 모집단 : 실험의 수행을 위한 표본을 뽑은 원래의 전체 집단

- 표본 : 실험 수행을 위해 모집단에서 추출한 집단

- 점 추정 : [실험 설계] “추측의 결과”가 어떻게 될 것인지 “하나의 값”으로 추정하는 것

- 구간 추정 : [실험 설계] “추측의 결과”가 어떻게 될 것인지 “특정 범위”로 추정하는 것

- 표준 오차 : 표본을 선발 시 그 기준과 선발 방법을 통일해도 선발되는 표본 집단들과 결과들이 다를 수 있음. 그러한 차이, 결과를 해석함에 있어 발생할 수 있는 오차범위

- 신뢰 구간 : 실험 결과가 실제로 포함될 것으로 예측하는 범위

- 유의수준 : [실험 설계] 설정한 신뢰구간 바깥의 나머지 범위! 실험의 극소수의 결과가 위치할 것으로 예상되는 지점들

 

  • 개인 인사이트

- A/B테스트와 같은 통계적 방법론을 사용할 때 실험의 설계 전과 도중에서의 설계 요인, 실험 후 신뢰성 확인에 신경 써야 될 부분이 늘어난다는 것이 복잡한 감정을 불러 일으킵니다. (배울 수 있어 다행이지만 배울 게 많아서 걱정되는 복잡한 심정)

- 테스트 설계 상 가설의 결과를 미리 예측한다는 것(신뢰구간 설정)과 실제 테스트 결과에서 그 형태(p-값)를 확인해 가설의 수용 여부를 결정하는 단계가 있다는 점에서 함부로 실험 후 바로 결과 해석(결과가 어떤 의미야?)으로 넘어가면 안된다는 것을 실감했습니다.

 

 

  • 팀원 인사이트

조혜령)

 - 테스트 설계 상 가설의 결과를 미리 예측한다는 것(신뢰구간 설정)과 실제 테스트 결과에서 그 형태(p-값)를 확인해 가설의 수용 여부를 결정하는 단계가 있다는 점에서 함부로 실험 후 바로 결과 해석(결과가 어떤 의미야?)으로 넘어가면 안된다는 것을 실감했습니다.

 - A/B 테스트는 단순히 두가지 선택지를 비교하는 것을 넘어, 통계적 유의성을 검증하여 신뢰할 수 있는 결론을 도출하는 과정이다

 

강현수)

 - 모든 분석은 결국 전체를 알 수 없기에 일부를 바탕으로 추정하는 과정이다. 통계는 이 불확실성을 줄이고 신뢰할 수 있는 결론을 도출하게 해주는 도구다

 

김세준)

 - A/B테스트가 단순하게 두가지의 경우를 비교하는것이 아닌 신뢰할 수 있는 결과를 도출하는 과정이고 이때 통계성 유의성까지 확인해야된다는것을 느꼈습니다.


  • 선택 학습반 도전 과제 코드 정리
  • 문제 : "소수 출력기 프로그램"
  • 설명
""""
사용자로부터 범위(시작 수와 끝 수)를 입력받아 해당 범위 내의 모든 소수를 출력하는 프로그램을 작성
소수는 1과 자기 자신으로만 나누어 떨어지는 1보다 큰 자연수입니다.
입력받은 범위 내의 모든 소수를 한 줄에 5개씩 출력합니다.
소수의 개수도 함께 출력합니다."""
# 소수의 확인 방법
A. "1과 자기자신으로 나눌 수 있다"
B. "구하고자 하는 값의 제곱근[==가운데 약수]까지 나누어 떨어지는 지 확인"

 

# 끝의 수가 시작하는 수보다 작을 경우 : range()함수를 사용하여 시작 값과 끝 값을 담을 예정이기에 걱정하지 않아도 된다.

 

  • 실제 제작 코드
import math
start_num = int(input("1을 제외한 시작할 수를 입력해주세요:"))
end_num = int(input("1을 제외한 마지막 수를 입력해주세요:"))
P_num_list = []
 
# 소수 판별 후 빈 리스트에 저장
for test_num in range(start_num, end_num+1):
    if test_num <=1:   # 실수로 1 이하의 값이 들어가는 것도 방지하여 조건 걸기
        continue
    P_num = True
    for a in range(2, int((test_num**0.5)+1)):   
        if test_num % a==0:    # 나머지가 없다 == 딱 맞게 떨어진다. == 나눌 수 있다.
            P_num = False
            break
    if P_num:
        P_num_list+=[str(test_num)]

#print(P_num_list)    # 소수를 정수 타입으로 담은 리스트 확인
 
for b in range(0, len(P_num_list), 5):
    print(*(P_num_list)[b:b+5])            
print("소수의 개수:", len(P_num_list))
# 리스트 요소를 5개씩 끊고, 출력문을 반복 수행
# * 코드로 리스트 출력 시의 따옴표 제거
# 소수의 개수를 len을 통해 카운트