Firebase A/B 테스팅 정보

테스트 결과의 관련성과 유용성을 극대화하는 데 도움이 되고자 이 페이지에서는 Firebase A/B 테스팅 작동 방식을 자세히 설명합니다.

샘플 크기

Firebase A/B 테스팅 추론에서는 실험을 시작하기 전에 최소 샘플 크기를 식별할 필요가 없습니다. 일반적으로 무리가 되지 않는 선에서 최대한의 실험 노출 수준을 선택해야 합니다. 샘플 크기가 클수록 통계적으로 유의미한 결과를 찾을 가능성이 커집니다. 특히 대안 간 실적 차이가 작은 경우에 그렇습니다. 또한 온라인 샘플 크기 계산기를 사용하여 실험의 특성에 따른 권장 샘플 크기를 확인할 수 있습니다.

실험 수정

다음과 같이 실행 중인 실험에서 선택한 매개변수를 수정할 수 있습니다.

  • 실험 이름
  • 설명
  • 타겟팅 조건
  • 대안 값

실험을 수정하려면 다음 안내를 따르세요.

  1. 수정할 실험의 결과 페이지를 엽니다.
  2. 더보기 메뉴에서 실행 중인 실험 수정을 선택합니다.
  3. 변경한 다음 게시를 클릭합니다.

실행 중인 실험에서 앱의 동작을 변경하면 결과에 영향이 있을 수 있습니다.

원격 구성 대안 할당 로직

비율 노출 조건을 비롯한 모든 실험 타겟팅 조건과 일치하는 사용자는 대안 가중치, 실험 ID의 해시 및 사용자의 Firebase 설치 ID에 따라 실험 대안에 할당됩니다.

Google 애널리틱스 잠재고객에는 지연 시간이 적용되어 사용자가 최초로 잠재고객 기준을 충족하는 즉시 데이터가 제공되지는 않습니다.

  • 잠재고객을 새로 만들면 신규 사용자를 집계하는 데 24~48시간 정도 걸릴 수 있습니다.
  • 신규 사용자는 일반적으로 자격을 얻고 24~48시간 후에 적격한 잠재고객으로 등록됩니다.

시간에 민감한 타겟팅이라면 Google 애널리틱스 사용자 속성 또는 국가 또는 지역, 언어, 앱 버전 등의 기본 제공 타겟팅 옵션을 사용하는 것이 좋습니다.

사용자가 실험에 배치되면 실험 대안에 영구적으로 할당되며 사용자 속성이 변경되어 더 이상 실험 타겟팅 기준을 충족하지 않더라도 실험이 활성 상태로 유지되는 한 실험에서 매개변수 값을 수신합니다.

활성화 이벤트

실험 활성화 이벤트에서는 실험 측정이 활성화 이벤트를 트리거하는 앱 사용자로 제한됩니다. 실험 활성화 이벤트는 앱에서 가져온 실험 매개변수에 영향을 미치지 않습니다. 실험 타겟팅 기준을 충족하는 모든 사용자가 실험 매개변수를 수신합니다. 따라서 실험 매개변수를 가져와 활성화한 후, 실험 매개변수를 사용하여 앱 동작을 수정하기 전에 발생하는 활성화 이벤트를 선택해야 합니다.

대안 가중치

실험을 만드는 동안 기본 대안 가중치를 변경하여 대안에 더 높은 비율의 실험 사용자를 배치할 수 있습니다.

테스트 결과 해석하기

Firebase A/B 테스팅은 빈도주의적 추론을 사용하여 실험 결과가 우연히 발생할 수 있는 가능성을 파악하는 데 도움을 줍니다. 이 가능성은 확률 값 또는 p값으로 표현됩니다. p값은 무작위로 두 대안 간의 실적 차이가 발생할 수 있는 확률로, 0과 1 사이의 값으로 측정됩니다. A/B 테스팅에서는 다음과 같이 유의 수준 0.05를 사용합니다.

  • 0.05 미만의 p값은 대안 간에 통계적으로 유의미한 차이가 있음을 나타내며 우연히 발생할 가능성이 낮다는 의미입니다.
  • 0.05보다 큰 p값은 대안 간 차이가 통계적으로 유의미하지 않음을 나타냅니다.

실험 데이터는 하루에 한 번 업데이트되며 최종 업데이트 시간이 실험 결과 페이지 상단에 표시됩니다.

실험 결과 그래프에는 선택한 측정항목의 누적 평균 값이 표시됩니다. 예를 들어 사용자당 광고 수익을 측정항목으로 추적하는 경우 사용자당 관찰된 수익을 표시하며, 비정상 종료가 발생하지 않은 사용자를 추적하는 경우에는 비정상 종료를 경험하지 않은 사용자의 비율을 추적합니다. 이 데이터는 실험 시작부터 누적됩니다.

결과는 관측 데이터추론 데이터로 분할됩니다. 관측 데이터는 Google 애널리틱스 데이터에서 직접 계산되며, 추론 데이터는 p값과 신뢰 구간을 제공하여 관측 데이터의 통계적 유의성을 평가하는 데 도움이 됩니다.

측정항목마다 다음 통계가 표시됩니다.

관측된 데이터

  • 추적된 측정항목의 총 값(유지된 사용자 수, 비정상 종료를 경험한 사용자 수, 총수익)
  • 측정항목별 비율(유지율, 전환율, 사용자당 수익)
  • 대안과 기준 간의 차이 비율(상승도)

추론 데이터

  • 95% CI(평균치의 차이)는 추적된 측정항목의 'true' 값이 포함된 구간을 95%의 신뢰도로 표시합니다. 예를 들어 실험에서 $5~ $10 사이의 총 예상 수익에 대한 CI가 95%라면 평균치의 실제 차이가 $5~ $10일 확률이 95%입니다. CI 범위에 0이 포함된 경우 대안과 기준 간에 통계적으로 유의미한 차이가 감지되지 않은 것입니다.

    신뢰 구간 값은 추적된 측정항목과 일치하는 형식으로 표시됩니다. 예를 들어 사용자 유지는 시간(HH:MM:SS 형식), 사용자당 광고 수익은 미국 달러(USD), 전환율은 백분율로 표시됩니다.

  • p값은 대안과 기준 간에 실제 차이가 없을 확률을 나타냅니다. 다시 말해, 관측된 차이는 우연히 발생했을 가능성이 높습니다. p값이 낮을수록 관찰된 실적이 미래에도 사실이라는 신뢰도가 높아집니다. 0.05 이하는 값은 큰 차이를 나타내며 결과가 우연히 발생했을 가능성이 낮음을 나타냅니다. p값은 단측 검정을 기반으로 하며, 대안 값이 기준 값보다 큽니다. Firebase는 연속 변수(수익과 같은 숫자 값)에 이분산 t-검정을 사용하고 전환 데이터(사용자 유지, 비정상 종료가 발생하지 않은 사용자, Google 애널리틱스 이벤트를 트리거하는 사용자 등 바이너리 값)에는 비율의 z-검정을 사용합니다.

실험 결과는 다음과 같이 각 실험 대안에 대한 중요한 통계를 제공합니다.

  • 직접 측정(즉, 실제 관측 데이터)된 각 실험 측정항목의 값과 기준의 차이
  • 대안과 기준 간에 관찰된 차이가 우연히 발생했을 가능성(p값)
  • 각 실험 측정항목에서 대안과 기준 간의 '실제' 실적 차이가 포함될 가능성이 높은 범위. '최상' 및 '최악'의 실적 시나리오를 이해할 수 있는 방법

Google 최적화 도구에서 제공하는 실험의 결과 해석하기

2023년 10월 23일 이전에 시작된 실험의 Firebase A/B 테스팅 결과는 Google 최적화 도구에서 제공되었습니다. Google 최적화 도구는 Bayesian 추론을 사용하여 실험 데이터에서 유용한 통계를 생성합니다.

결과는 '관측 데이터'와 '모델링된 데이터'로 분할됩니다. 관측 데이터는 애널리틱스 데이터에서 직접 계산되었으며, 모델링된 데이터는 Bayesian 모델을 관측 데이터에 적용하여 파생되었습니다.

측정항목마다 다음 통계가 표시됩니다.

관측 데이터

  • 총 값(대안의 모든 사용자에 대한 측정항목 합계)
  • 평균 값(대안의 사용자에 대한 측정항목 평균 값)
  • 기준과의 차이(%)

모델링된 데이터

  • 기준 초과 가능성: 이 대안에서 측정항목의 값이 기준보다 높을 가능성
  • 기준과의 차이(%): 대안 및 기준의 측정항목에 대한 중앙값 모델 예상치를 사용해 계산
  • 측정항목 범위: 측정항목 값이 발견될 가능성이 가장 높은 범위(50% 및 95% 확실성)

대체로 실험 결과에서는 실험의 각 대안에 관한 3가지 중요 통계를 제공합니다.

  1. 직접 측정(예: 실제 관측 데이터)된 각 실험 측정항목의 값과 기준의 차이
  2. Bayesian 추론을 토대로 각 실험 측정항목이 기준/가장 우수할 확률보다 높을 가능성(각각 우수/최우수 실적 가능성)
  3. Bayesian 추론을 기반으로 한 각 실험 측정항목의 타당한 범위 - '최고' 및 '최악'의 시나리오(신용 구간)

최우수 대안 결정

빈도주의적 추론을 사용하는 실험의 경우 Firebase는 목표 측정항목에서 대안과 기준 간에 통계적으로 유의미한 성능 차이가 있을 때 대안이 최우수 대안임을 선언합니다. 여러 대안이 이 기준을 충족하면 p값이 가장 낮은 대안이 선택됩니다.

Google 최적화 도구를 사용한 실험에서 Firebase는 기본 측정항목에서 대안이 기준 대안보다 우수할 확률이 95%를 넘으면 '명확한 최우수 대안'으로 선언했습니다. 여러 대안이 '명확한 최우수 대안' 기준을 충족한 경우 실적이 가장 좋은 대안에만 '명확한 최우수 대안' 라벨이 지정되었습니다.

최우수 대안은 기본 목표만을 토대로 결정되므로 최우수 대안을 적용할지 여부를 결정하기 전에 모든 관련 요소를 고려하고 보조 측정항목의 결과를 검토해야 합니다. 변경 시 예상되는 긍정적인 요소, 부정적인 위험 요소(예: 개선에 대한 신뢰 구간의 하한값), 기본 목표 이외의 측정항목에 미치는 영향을 고려할 수 있습니다.

예를 들어 기본 측정항목이 비정상 종료가 발생하지 않은 사용자이고 대안 A가 기준보다 우수하지만 대안 A 사용자 유지율 측정항목이 기준 사용자 유지율보다 낮은 경우, 대안 A를 보다 광범위하게 적용하기 전에 추가 조사를 하는 것이 좋습니다.

기본 및 보조 측정항목의 전반적인 실적 평가를 토대로 최우수 대안뿐만 아니라 모든 대안을 적용할 수 있습니다.

실험 기간

Firebase에서는 다음 조건이 충족될 때까지 실험을 계속 수행할 것을 권장합니다.

  1. 실험에서 유용한 결과를 제공하기 위한 충분한 데이터가 수집되었습니다. 실험 및 결과 데이터는 매일 한 번 업데이트됩니다. 온라인 샘플 크기 계산기를 사용하여 실험의 권장 샘플 크기를 평가할 수 있습니다.
  2. 샘플이 사용자를 대표하며 장기적인 실적을 측정할 수 있을 만큼 실험을 충분히 진행했습니다. 일반적인 원격 구성 실험에 권장되는 최소 런타임은 2주입니다.

실험 데이터는 실험 시작 후 최대 90일 동안 처리됩니다. 90일이 지나면 실험이 자동으로 중단됩니다. 실험 결과가 Firebase Console에서 더 이상 업데이트되지 않고 실험에서 실험별 매개변수 값을 전송하지 않습니다. 이 시점에서 클라이언트는 원격 구성 템플릿에 설정된 조건을 기반으로 매개변수 값을 가져오기 시작합니다. 이전 실험 데이터는 실험을 삭제할 때까지 보관됩니다.

BigQuery 스키마

Firebase Console에서 A/B 테스팅 실험 데이터를 보는 것 외에도 BigQuery에서 실험 데이터를 검사하고 분석할 수 있습니다. A/B 테스팅에는 별도의 BigQuery 테이블이 없지만 실험 및 대안 멤버십은 애널리틱스 이벤트 테이블 내의 모든 Google 애널리틱스 이벤트에 저장됩니다.

실험 정보가 포함된 사용자 속성은 userProperty.key like "firebase_exp_%" 또는 userProperty.key = "firebase_exp_01" 형식이며, 여기서 01은 실험 ID이고 userProperty.value.string_value에는 실험 대안의 색인(0부터 시작)이 포함됩니다.

이러한 실험 사용자 속성을 사용하여 실험 데이터를 추출할 수 있습니다. 이를 통해 실험 결과를 다양한 방법으로 분할하고 A/B 테스팅의 결과를 독립적으로 검증할 수 있습니다.

시작하려면 이 가이드에 설명된 대로 다음을 완료하세요.

  1. Firebase Console에서 Google 애널리틱스에 BigQuery Export 사용 설정
  2. BigQuery를 사용하여 A/B 테스팅 데이터에 액세스
  3. 예시 쿼리 살펴보기

Firebase Console에서 Google 애널리틱스에 BigQuery Export 사용 설정

Spark 요금제를 사용 중인 경우 BigQuery 한도에 따라 BigQuery 샌드박스를 사용해 BigQuery에 무료로 액세스할 수 있습니다. 자세한 내용은 가격 책정 및 BigQuery 샌드박스를 참조하세요.

먼저 애널리틱스 데이터를 BigQuery로 내보내는지 확인합니다.

  1. 통합 탭(Firebase Console > 프로젝트 설정을 사용해 액세스 가능)을 엽니다.
  2. 이미 다른 Firebase 서비스와 함께 BigQuery를 사용하고 있는 경우 관리를 클릭합니다. 그렇지 않으면 연결을 클릭합니다.
  3. Firebase와 BigQuery 연결 정보를 검토한 후 다음을 클릭합니다.
  4. 통합 구성 섹션에서 Google 애널리틱스 전환 버튼을 사용 설정합니다.
  5. 지역을 선택하고 내보내기 설정을 선택합니다.

  6. BigQuery에 연결을 클릭합니다.

선택한 데이터 내보내기 방식에 따라 테이블을 사용할 수 있을 때까지 최대 하루가 걸릴 수 있습니다. 프로젝트 데이터를 BigQuery로 내보내는 방법에 대한 자세한 내용은 BigQuery에 프로젝트 데이터 내보내기를 참조하세요.

BigQuery에서 A/B 테스팅 데이터에 액세스

특정 실험 데이터를 쿼리하기 전에 쿼리에 사용할 다음의 일부 또는 전체를 얻는 것이 좋습니다.

  • 실험 ID: 실험 개요 페이지의 URL에서 이 값을 가져올 수 있습니다. 예를 들어 URL이 https://console.firebase.google.com/project/my_firebase_project/config/experiment/results/25와 같은 형식이면 실험 ID는 25입니다.
  • Google 애널리틱스 속성 ID: 9자리의 Google 애널리틱스 속성 ID입니다. Google 애널리틱스 내에서 이를 찾을 수 있습니다. 프로젝트 이름을 확장하여 Google 애널리틱스 이벤트 테이블 이름(project_name.analytics_000000000.events)을 표시할 때도 BigQuery에 표시됩니다.
  • 실험일: 더 빠르고 효율적인 쿼리를 작성하려면 실험 데이터(YYYYMMDD 접미사로 식별되는 테이블)가 포함된 Google 애널리틱스 일일 이벤트 테이블 파티션(테이블)으로 쿼리를 제한하는 것이 좋습니다. 따라서 실험이 2024년 2월 2일부터 2024년 5월 2일까지 진행되었다면 _TABLE_SUFFIX between '20240202' AND '20240502'를 지정합니다. 예를 보려면 특정 실험의 값 선택을 참조하세요.
  • 이벤트 이름: 일반적으로 실험에서 구성한 목표 측정항목과 일치합니다. 예를 들어 in_app_purchase 이벤트, ad_impression 또는 user_retention 이벤트입니다.
를 참조하세요.

쿼리를 생성하는 데 필요한 정보를 수집한 후에는 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 BigQuery를 엽니다.
  2. 프로젝트를 선택한 다음 SQL 쿼리 만들기를 선택합니다.
  3. 쿼리를 추가합니다. 실행할 쿼리 예시는 예시 쿼리 살펴보기를 참조하세요.
  4. 실행을 클릭합니다.

Firebase Console의 자동 생성된 쿼리를 사용하여 실험 데이터 쿼리

Blaze 요금제를 사용하는 경우 실험 개요 페이지에 보고 있는 실험의 실험 이름, 대안, 이벤트 이름, 실험의 이벤트 수를 반환하는 샘플 쿼리가 제공됩니다.

자동 생성된 쿼리를 가져와서 실행하는 방법은 다음과 같습니다.

  1. Firebase Console에서 A/B 테스팅을 열고 쿼리할 A/B 테스팅 실험을 선택하여 실험 개요를 엽니다.
  2. BigQuery 통합 아래의 옵션 메뉴에서 실험 데이터 쿼리를 선택합니다. 그러면 Google Cloud 콘솔 내의 BigQuery에서 프로젝트가 열리고 실험 데이터를 쿼리하는 데 사용할 수 있는 기본 쿼리가 제공됩니다.

다음 예시는 'Winter welcome experiment'이라는 이름의 3가지 대안(기준 포함)이 있는 실험에 대해 생성된 쿼리를 보여줍니다. 각 이벤트의 활성 실험 이름, 대안 이름, 순 이벤트, 이벤트 수를 반환합니다. 쿼리 빌더는 프로젝트 내에서 직접 열리므로 테이블 이름에 프로젝트 이름을 지정하지 않습니다.

  /*
    This query is auto-generated by Firebase A/B Testing for your
    experiment "Winter welcome experiment".
    It demonstrates how you can get event counts for all Analytics
    events logged by each variant of this experiment's population.
  */
  SELECT
    'Winter welcome experiment' AS experimentName,
    CASE userProperty.value.string_value
      WHEN '0' THEN 'Baseline'
      WHEN '1' THEN 'Welcome message (1)'
      WHEN '2' THEN 'Welcome message (2)'
      END AS experimentVariant,
    event_name AS eventName,
    COUNT(*) AS count
  FROM
    `analytics_000000000.events_*`,
    UNNEST(user_properties) AS userProperty
  WHERE
    (_TABLE_SUFFIX BETWEEN '20240202' AND '20240502')
    AND userProperty.key = 'firebase_exp_25'
  GROUP BY
    experimentVariant, eventName

추가 쿼리 예시를 보려면 예시 쿼리 살펴보기로 이동하세요.

예시 쿼리 살펴보기

다음 섹션에서는 Google 애널리틱스 이벤트 테이블에서 A/B 테스팅 실험 데이터를 추출하는 데 사용할 수 있는 쿼리의 예시를 보여줍니다.

모든 실험에서 구매 및 실험 표준 편차 값 추출

실험 결과 데이터를 사용하여 Firebase A/B 테스팅 결과를 독립적으로 확인할 수 있습니다. 다음 BigQuery SQL 문은 실험 대안 및 각 대안의 순 사용자 수를 추출하고 in_app_purchaseecommerce_purchase 이벤트에서 발생한 총수익과 _TABLE_SUFFIX 시작일과 종료일로 지정된 기간 내의 모든 실험의 표준 편차를 합산합니다. 이 쿼리에서 얻은 데이터를 단측 t-검정의 통계적 유의성 생성기와 함께 사용하여 Firebase가 제공하는 결과가 자체 분석과 일치하는지 확인할 수 있습니다.

A/B 테스팅에서 추론을 계산하는 방법에 관한 자세한 내용은 테스트 결과 해석을 참조하세요.

  /*
    This query returns all experiment variants, number of unique users,
    the average USD spent per user, and the standard deviation for all
    experiments within the date range specified for _TABLE_SUFFIX.
  */
  SELECT
    experimentNumber,
    experimentVariant,
    COUNT(*) AS unique_users,
    AVG(usd_value) AS usd_value_per_user,
    STDDEV(usd_value) AS std_dev
  FROM
    (
      SELECT
        userProperty.key AS experimentNumber,
        userProperty.value.string_value AS experimentVariant,
        user_pseudo_id,
        SUM(
          CASE
            WHEN event_name IN ('in_app_purchase', 'ecommerce_purchase')
              THEN event_value_in_usd
            ELSE 0
            END) AS usd_value
      FROM `PROJECT_NAME.analytics_ANALYTICS_ID.events_*`
      CROSS JOIN UNNEST(user_properties) AS userProperty
      WHERE
        userProperty.key LIKE 'firebase_exp_%'
        AND event_name IN ('in_app_purchase', 'ecommerce_purchase')
        AND (_TABLE_SUFFIX BETWEEN 'YYYYMMDD' AND 'YYYMMDD')
      GROUP BY 1, 2, 3
    )
  GROUP BY 1, 2
  ORDER BY 1, 2;

특정 실험의 값 선택

다음 쿼리 예시는 BigQuery에서 특정 실험을 위한 데이터를 가져오는 방법을 보여줍니다. 이 샘플 쿼리는 실험 이름, 대안 이름(기준 포함), 이벤트 이름, 이벤트 수를 반환합니다.

  SELECT
    'EXPERIMENT_NAME' AS experimentName,
    CASE userProperty.value.string_value
      WHEN '0' THEN 'Baseline'
      WHEN '1' THEN 'VARIANT_1_NAME'
      WHEN '2' THEN 'VARIANT_2_NAME'
      END AS experimentVariant,
    event_name AS eventName,
    COUNT(*) AS count
  FROM
    `analytics_ANALYTICS_PROPERTY.events_*`,
    UNNEST(user_properties) AS userProperty
  WHERE
    (_TABLE_SUFFIX BETWEEN 'YYYMMDD' AND 'YYYMMDD')
    AND userProperty.key = 'firebase_exp_EXPERIMENT_NUMBER'
  GROUP BY
    experimentVariant, eventName

한도

A/B 테스팅은 총 실험 300개, 진행 중인 실험 24개, 임시 실험 24개로 제한됩니다.

  • 총 실험 한도 300개 또는 임시 실험 한도 24개에 도달하면 새 실험을 만들기 전에 기존 실험을 삭제해야 합니다.

  • 진행 중인 실험 한도인 24개에 도달하면 새 실험을 시작하기 전에 실행 중인 실험을 중단해야 합니다.

실험에는 최대 8개의 대안(기준 포함)과 각 대안당 최대 25개의 매개변수가 포함될 수 있습니다. 실험의 크기는 약 200KiB까지 가능합니다. 여기에는 대안 이름, 대안 매개변수, 기타 구성 메타데이터가 포함됩니다.