AB 테스트란?

  • 유래 : 신약을 테스트 할때 기준을 정하고(혈압, 혈당 등) 신약,구약 후보군을 둘로 나눠서 효능 테스트함. AB 후보군의 혈당, 혈압의 차이가 통계적 의미를 가지는 정도 인지를 본다. 이를 코드 개발에도 적용하게됨. A와 B 페이지를 동시에 구성해서 A페이지 B페이지의 고객 행동의 차이가 있는지 관찰가능.
    +가설 : 이 약을 먹으면 혈압이 증가할 것이다.
  • AB 테스트는 새로운 기능이나 변경이 생겼을때,  가설을 실험하고 검증할 때 쓰인다.
    예) 상품 추천 알고리즘을 머신러닝으로 하면 매출이 늘어날 것이다. -> AB 테스트 검증 -> 사실
    예) 상품 스텝을 줄이면 결제가 올라갈것이다. -> AB 테스트 검증 -> 비싼 상품은 신뢰도가 더 중요

AB테스트 장단점

  • 장점:
    1. 성능 최적화:
       - A/B 테스트를 통해 여러 버전을 동시에 평가하므로 어떤 기능 또는 디자인이 사용자에게 가장 긍정적인 영향을 미치는지 확인할 수 있습니다.
       - 이를 통해 성능을 최적화하고 사용자 만족도를 높일 수 있습니다.

    2. 데이터 기반 의사결정:
       - A/B 테스트는 데이터 기반의 의사결정을 가능하게 합니다. 통계적으로 유의미한 결과를 얻어, 개선 사항을 신뢰성 있게 판단할 수 있습니다.

    3. 배우기 쉬움:
       - A/B 테스트는 비교적 간단한 개념으로, 초기 단계에서 적용하기 쉽습니다.
       - 실험과 통계 분석에 대한 지식을 키우는 데 도움이 됩니다.

    4. 비즈니스 목표 달성:
       - 비즈니스 목표를 달성하기 위한 최적의 전략을 찾아내는 데 도움이 됩니다.
       - 기능이나 디자인 변경이 실제로 비즈니스 성과에 어떤 영향을 미치는지 확인할 수 있습니다.

    5. 위험부담 감소
        - 잘못돼도 절반의 위험

  • 단점:
    1. 시간과 비용 소모:
       - A/B 테스트를 실시하기 위해서는 시간과 자원이 소모됩니다. 두 가지 이상의 버전을 개발하고, 테스트를 실행하며, 결과를 분석하는 데에 시간과 비용이 듭니다. (airbnb의 경우 70% 데이터 사용)

    2. 리소스 낭비:
       - 실패한 변형에 할당된 리소스는 낭비될 수 있습니다. 실험 결과가 예상치 못하게 나오면 투자한 노력과 비용이 낭비될 수 있습니다.

    3. 테스트 설계의 어려움:
       - 적절한 실험 설계를 수립하는 것이 어려울 수 있습니다. 변수의 올바른 설정, 샘플 크기 결정 등이 중요하며, 실수할 경우 결과의 신뢰도가 감소할 수 있습니다.

    4. 유의미한 결과 부족:
       - 가끔은 테스트 결과가 유의미한 차이를 보이지 않을 수 있습니다. 이는 사용자 행동의 복잡성이나 다양성 때문일 수 있습니다.

AB테스트 사용하면 안되는 경우

  • 가설에 근거가 없거나 구체적이지 않은 아이디어
  • 버그 수정을 위한 AB 테스트(둘중에 더 좋은걸 판단하는게 AB테스트, 버그는 그냥 빨리 고쳐!)
  • 비교 대상이 하나가 아닌경우
  • 트래픽이 별로없는 서비스의 경우, 어짜피 분석해봤자 유의미한 결과가 나오기 힘들다.
  • 어떤 결정(가격)은 데이터로만 판단할수 없음 : 거시적 경제상황, 경쟁사의 가격정책도 고려
  • 분석에 필요한 데이터 품질이 낮은경우
  • 특정팀이나 개인의 의견만이 반영되는 환경
  • 리뷰 리딩하는 사람이 주니어라 No라는 말을 잘 못하는 경우 -> 시니어급으로 할것

AB테스트 실제 예 

  • 가격 인상 전에도 AB테스트를 해봄. 인상군 비인상군 비교-> 큰차이가 안남 ->  큰차이가 안나서 가격을 일괄올림 -> 판매량 급감

AB 테스트는 agile 해야함

  • 주요한 Agile 원칙은 "개발자와 비즈니스 담당자 간의 긴밀한 협력",
  • "작동하는 소프트웨어를 우선으로",
  • "변화에 대응하는 유연한 계획",
  • "자주 배포"

AB테스트 과정

  • 실행전 AB테스트 제안
  • 성공기준 정함
  • 실행중 AB테스트 결과 리뷰

AB테스트 실제과정

  1. 0~1% smoke test : B가 버그가 있는지 확인하는 정도
  2. 5~10% initial ramp : 가설 확인
  3. 25~50% intermediate ramp : 가설과 별도로 매출의 영향을 봄
  4. 100% Final ramp-up : 최종 판단 후 결정

AB 테스트 분석을 위해 필요한 정보

  1. 사용자별 AB 버킷 정보(사용자중 누가 A들어갔고, B에 들어갔는지)
  2. 사용자별 행동 정보(본거,클릭, 구매)
    -> 1,2 join 해서 그룹간 통계 정보 계산
  3.  

초록색 : 통계적으로 높다/ 빨간색 : 통계적으로 낮다.

AB테스트 시스템 구성

  • 작은 회사는 SaaS 를 사용
  • 런타임 시스템(버킷 결정로직 중요) + 분석시스템 2개로 나뉜다.

 

  • 전체과정

 

 

AA테스트

  • AA 테스트는 기본적으로 A/B 테스트에서 A와 A로 구성된 실험입니다. 즉, 두 그룹이 동일한 조건에서 같은 변종을 보는 실험입니다. 이는 주로 실험 환경의 안정성을 확인하거나 테스트 시스템의 정확성을 검증하기 위해 사용됩니다.

 

userid vs deviceid 

  • userid : 등록사용자
  • deviceid : 로그인 상관없이 서비스 방문자에게 부여되는 id, 브라우저 쿠키로 만들어짐
  • 나누는 방법들 

 

 

 

outlier가 A/B 테스트에 미치는 영향

  • 큰손들의 구매
  • 특정 이슈로 인한 과 트래픽 발생

'데이터 기초' 카테고리의 다른 글

ETL 기초 실습  (0) 2023.12.31
테스트 코드 구조 소개  (1) 2023.12.25
워드클라우드 이용 데이터 시각화  (0) 2023.10.27
셀레니엄 이용한 자동화 웹 스크래핑  (0) 2023.10.26

 

 

'데이터 기초' 카테고리의 다른 글

AB테스트  (0) 2024.01.04
테스트 코드 구조 소개  (1) 2023.12.25
워드클라우드 이용 데이터 시각화  (0) 2023.10.27
셀레니엄 이용한 자동화 웹 스크래핑  (0) 2023.10.26

테스트 코드 구조 분석(행맨 테스트 코드 이용)

  • test.py
    # 필요한 모듈을 가져옵니다: 유닛 테스트를 위한 unittest 및 'app' 모듈(이름이 'hangman'으로 변경됨).
    import unittest
    import app as hangman

    # Hangman 테스트 케이스를 위한 클래스를 정의하며, unittest.TestCase를 상속합니다.
    class HangmanTestCase(unittest.TestCase):

        # 'checkCorrectAnswer' 함수에 대한 테스트 케이스입니다.
        def test_checkCorrectAnswer(self):
            # 특정 매개변수로 'checkCorrectAnswer' 함수를 호출합니다.(아래 app.py 파일에 있음)
            answer = hangman.checkCorrectAnswer("baon", "baboon")
            # 결과가 True인지 확인하여 정확성을 기대합니다.
            self.assertTrue(answer)

        # 'checkWrongAnswer' 함수에 대한 테스트 케이스입니다.
        def test_checkWrongAnswer(self):
            # 특정 매개변수로 'checkWrongAnswer' 함수를 호출합니다. (아래 app.py 파일에 있음)
            answer = hangman.checkWrongAnswer("zebrio", "zebra")
            # 결과가 True인지 확인하여 잘못된 답을 기대합니다.
            self.assertTrue(answer)

        # 'checkCorrectAnswer'에 대한 추가 테스트 케이스 1입니다.
        def test_1(self):
            # 특정 매개변수로 'checkCorrectAnswer' 함수를 호출합니다.
            answer = hangman.checkCorrectAnswer("bazn", "baboon")
            # 결과가 False인지 확인하여 잘못된 추측을 기대합니다.
            self.assertFalse(answer)

        # 'checkCorrectAnswer'에 대한 추가 테스트 케이스 2입니다.
        def test_2(self):
            # 빈 문자열과 공백을 매개변수로 'checkCorrectAnswer' 함수를 호출합니다.
            answer = hangman.checkCorrectAnswer("", " ")
            # 결과가 False인지 확인하여 빈 문자열이 올바른 추측이 아님을 기대합니다.
            self.assertFalse(answer)

        # 'checkCorrectAnswer'에 대한 추가 테스트 케이스 3입니다.
        def test_3(self):
            # 대문자를 사용하여 'checkCorrectAnswer' 함수를 호출합니다.
            answer = hangman.checkCorrectAnswer("ZEBRA", "zebra")
            # 결과가 False인지 확인하여 대소문자 구분 비교를 기대합니다.
            self.assertFalse(answer)

    # 스크립트가 직접 실행되는지 확인하고 유닛 테스트를 실행합니다.
    if __name__ == "__main__":
        unittest.main()

  • app.py
    (중략)
    # 플레이어가 이겼는지 확인
    def checkCorrectAnswer(correctLetters, secretWord):
        # 모든 글자가 올바르게 추측되었는지 여부를 나타내는 변수
        foundAllLetters = True
        
        # 비밀 단어의 각 글자에 대해 반복
        for i in range(len(secretWord)):
            # 만약 비밀 단어의 현재 글자가 올바르게 추측된 글자에 포함되어 있지 않다면
            if secretWord[i] not in correctLetters:
                # foundAllLetters를 False로 설정하고 반복 중지
                foundAllLetters = False
                break
        
        # 모든 글자가 올바르게 추측되었는지 여부 반환
        return foundAllLetters


    # 플레이어가 너무 많은 횟수로 추측하여 게임에 패배했는지 확인
    def checkWrongAnswer(missedLetters, secretWord):
        # 만약 플레이어가 너무 많은 횟수로 추측하여 패배한 경우
        if len(missedLetters) == len(HANGMANPICS) - 1:
            # True 반환
            return True
        # 그 외의 경우 False 반환
        return False

'데이터 기초' 카테고리의 다른 글

AB테스트  (0) 2024.01.04
ETL 기초 실습  (0) 2023.12.31
워드클라우드 이용 데이터 시각화  (0) 2023.10.27
셀레니엄 이용한 자동화 웹 스크래핑  (0) 2023.10.26

 

 

'데이터 기초' 카테고리의 다른 글

AB테스트  (0) 2024.01.04
ETL 기초 실습  (0) 2023.12.31
테스트 코드 구조 소개  (1) 2023.12.25
셀레니엄 이용한 자동화 웹 스크래핑  (0) 2023.10.26

 

 

'데이터 기초' 카테고리의 다른 글

AB테스트  (0) 2024.01.04
ETL 기초 실습  (0) 2023.12.31
테스트 코드 구조 소개  (1) 2023.12.25
워드클라우드 이용 데이터 시각화  (0) 2023.10.27

+ Recent posts