실험을 통해 게임 내 및 매치메이킹 A/B 테스트를 실행하여 게임 변경의 인과적 영향을 측정할 수 있습니다. 예를 들어, 서로 다른 온보딩 경험을 서로 다른 플레이어에게 보여주고 플레이 시간, 유지율 및 기타 주요 성과 지표의 차이를 측정할 수 있습니다.
실험은 다음을 측정하는 데 탁월합니다:
- 참여도 - 온보딩 흐름, 진행 시스템, 제어 방식, 맞춤형 매치메이킹
- 수익화 - 상점 가시성 및 사용자 경험, 스타터 팩 유형, 가격 책정

실험 생성
실험은 두 가지 유형이 있습니다:
- 게임 내 실험은 서로 다른 구성 값의 영향을 측정할 수 있습니다.
- 매치메이킹 실험은 서로 다른 맞춤형 매치메이킹 구성의 영향을 측정할 수 있습니다. 게임 내 실험과 달리, 한 번에 하나의 매치메이킹 실험만 실행할 수 있습니다.
구성이 없는 경우, 게임을 위한 구성을 생성합니다.
Creator Hub 실험 페이지에서 실험 생성을 클릭합니다.
유형에서 게임 내를 선택합니다.
실험의 이름, 목표 지표 및 계획된 기간을 지정합니다. 실험은 14-60일 동안 실행됩니다.
목표 지표로 무엇을 선택하든 관계없이, 실험은 목록의 모든 지표를 추적합니다.
비율 롤아웃을 선택합니다. 이 숫자는 실험에 포함할 플레이어의 비율입니다.
일반적으로 실험에 포함하는 사람이 많을수록 데이터가 더 좋지만, 게임에 가장 적합한 것을 판단하는 것은 여러분의 몫입니다.
변형 및 비율을 지정합니다.
변형은 구성의 대체 값입니다. 제어 값이 500인 숫자 구성 키 bossHealth의 경우, 300의 변형을 지정할 수 있습니다. 실험에서 최대 두 개의 변형과 하나의 제어를 가질 수 있습니다.
비율은 실험 롤아웃 내에서 변형을 할당하는 방법을 결정합니다. 다음 예를 고려해 보세요:
- 전체 롤아웃을 40%로 선택합니다.
- 두 개의 변형과 제어 간의 50/50 분할을 지정합니다.
이 예에서 60%의 사용자가 실험에서 제외됩니다. 이 사용자들은 제어를 받고 실험 결과에 영향을 미치지 않습니다. 약 20%의 사용자가 실험의 일환으로 제어를 받습니다. 또 다른 20%는 변형을 받습니다. 플레이어 수에 따라 이 분포가 실행 가능한 결과를 도출하기에 충분하지 않을 수 있습니다.

(선택 사항) 특정 청중을 대상으로 실험을 설정하여 일치하는 플레이어만 등록할 수 있도록 합니다. 타겟팅은 조건부 구성과 동일한 플레이어 속성을 사용하며, 기존 조건을 구성에서 직접 복사할 수 있습니다. 자세한 내용은 특정 청중을 대상으로 실험 설정을 참조하세요.

마지막 단계는 일정 설정입니다. 실험을 즉시 시작하거나 나중의 날짜와 시간으로 예약할 수 있습니다. 실험을 예약한 후에는 구성(기간, 롤아웃 비율, 변형 등)을 변경할 수 없지만, 다시 예약할 수 있습니다.
지표
실험은 실험 기간 동안 다음의 모든 지표를 추적합니다. 이 지표는 실험이 실행되는 동안 매 24시간마다 업데이트됩니다. 그러나 실험의 첫 24시간 동안은 플레이 시간, 지불자 전환율 및 ARPU가 매 5분마다 업데이트되어 중요한 회귀를 빠르게 포착할 수 있습니다 (조기 피해).
| 지표 | 설명 | 조기 피해? |
|---|---|---|
| D1 유지율 | 하루 후 게임에 돌아온 신규 플레이어의 비율. | 아니요 |
| D7 유지율 | 일주일 후 게임에 돌아온 신규 플레이어의 비율. | 아니요 |
| 플레이 시간 | 플레이어가 게임 내에서 보낸 평균 시간. 실험 기간 동안 누적됩니다. | 예 |
| ARPU | 사용자당 평균 수익. 수익을 플레이어 수로 나눈 값. 실험 기간 동안 누적됩니다. | 예 |
| ARPPU | 지불 사용자당 평균 수익. 게임 관련 아이템을 구매한 플레이어 수로 나눈 수익. 실험 기간 동안 누적됩니다. | 아니요 |
| 지불자 전환율 | 게임 관련 아이템을 구매한 플레이어의 비율. 실험 기간 동안 누적됩니다. | 예 |
| 세션 시간 | 플레이 시간 나누기 세션 수. 실험 기간 동안 누적됩니다. | 아니요 |
실험 상태
실험 페이지는 실험에 대한 다음 상태를 표시합니다.
| 상태 | 설명 |
|---|---|
| 완료 | 실험이 종료되었습니다. 이는 수동으로 중지하거나 결정을 내리거나 결정 날짜(게임 내의 경우 14일 후, 매치메이킹의 경우 즉시) 직후에 자동으로 발생합니다. 세부정보와 결과를 여전히 검토할 수 있습니다. |
| 결정 필요 | 실험이 결정 날짜에 도달했습니다. 이제 결과를 검토하기에 좋은 시점입니다. |
| 실행 중 | 실험이 실행 중이지만 결정 날짜에 도달하지 않았습니다. |
| 예약됨 | 실험이 미래의 날짜에 시작되도록 예약되었습니다. |
| 초안 | 실험이 시작되거나 예약되지 않았습니다. 설정을 마무리할 수 있습니다. |
특정 청중을 대상으로 실험 설정
기본적으로 게임 내 실험은 롤아웃 비율에 따라 모든 플레이어를 등록할 수 있습니다. 타겟팅을 통해 특정 청중을 대상으로 실험을 실행할 수 있습니다. 예를 들어 특정 국가의 플레이어, 특정 재직 기간, 또는 활성 지출자 계층을 대상으로 할 수 있습니다. 타겟팅은 구성 타겟팅과 동일한 속성을 사용합니다.
타겟팅된 실험 설정
타겟팅 기준은 실험 생성 시 구성합니다. 실험이 시작된 후에는 타겟팅 규칙, 제어 값, 변형 또는 구성 키가 사용하는 조건부 규칙을 변경할 수 없습니다.
기존 조건부 규칙을 재사용하여 타겟팅을 정의할 수 있지만, 실험은 각 규칙의 독립적인 복사본을 저장합니다. 나중에 원래 구성 조건을 편집하거나 삭제해도 실험의 타겟팅에는 영향을 미치지 않습니다.
청중을 좁히면 샘플 크기가 줄어들기 때문에 Roblox는 타겟팅 기준에 맞는 청중의 추정치를 사용하여 최소 감지 효과 (MDE)를 업데이트합니다. 타겟팅된 청중이 통계적으로 의미 있는 결과를 생성할 수 있을 만큼 충분히 큰지 확인하세요.
Roblox가 타겟팅된 값을 해결하는 방법
Roblox는 실험을 먼저 평가한 후, 표준 조건부 구성의 규칙을 평가합니다. 구성 키에 활성 실험이 있는 경우, Roblox는 다음 순서로 값을 해결합니다:
- 플레이어가 타겟팅되고 등록된 경우 활성 실험 값.
- 첫 번째 일치하는 구성 조건.
- 이후의 모든 일치하는 구성 조건.
- 기본값.
제어 그룹의 플레이어는 기존 구성 규칙이 생성하는 값을 받습니다. 동일한 구성 키에서 한 번에 하나의 활성 실험만 실행할 수 있습니다.
세션별 평가
Roblox는 타겟팅 속성을 세션별로 평가하므로 개별 플레이어의 자격이 시간이 지남에 따라 변경될 수 있습니다:
- 플레이어가 세션 중에 타겟팅 기준에 맞으면 등록되어 실험 변형을 받을 수 있습니다.
- 나중의 세션에서 더 이상 일치하지 않으면 실험 값을 받지 않고 즉시 표준 구성 규칙으로 돌아갑니다. 실험이 자격 이상으로 연속성을 필요로 하는 경우—예를 들어 신규 플레이어를 대상으로 하는 다중 세션 온보딩 흐름—값을 직접 유지해야 합니다. 예를 들어 데이터 저장소에서 유지할 수 있습니다.
플레이어의 데이터는 등록된 변형(또는 제어)에 귀속되며, 나중에 기준에 맞지 않더라도 유지됩니다. 예를 들어, D7 유지율은 0일에 등록된 플레이어가 7일에 돌아왔는지 여부를 여전히 계산합니다. 4일째에 더 이상 자격이 없더라도 말입니다.
실험 실행 중 구성 변경
구성 드리프트 및 손상된 실험 데이터를 방지하기 위해 Roblox는 실험이 실행되기 시작하는 순간 구성 키를 잠급니다:
- 실행 중인 구성 키를 편집하거나 삭제할 수 없으며, 표준 조건부 값을 수정할 수 없습니다.
- 활성 구성에서 참조하는 모든 전역 조건도 잠겨 있습니다. 서로에 대해 편집, 삭제 또는 재정렬할 수 없습니다.
잠금은 실험이 완료되면 해제됩니다.
코드에 실험 추가
게임 내 실험을 적용하는 것은 구성 적용과 유사합니다. 주요 차이점은 ConfigService:GetConfigForPlayerAsync()를 사용하고 ConfigService:GetConfigAsync()를 사용하지 않는 것입니다.
GetConfigForPlayerAsync()는 플레이어별 스냅샷을 검색합니다. GetValue()를 호출하면 스냅샷이 활성 실험을 확인하고 롤아웃 비율에 따라 사용자를 등록(또는 등록하지 않음)합니다.
local ConfigService = game:GetService("ConfigService")
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local playerConfig = ConfigService:GetConfigForPlayerAsync(player)
local leaderboardColor = playerConfig:GetValue("leaderboardColor")
end
Players.PlayerAdded:Connect(onPlayerAdded)각 플레이어에 대해 GetConfigForPlayerAsync()를 별도로 호출해야 합니다. GetConfigAsync()는 실험을 적용하지 않습니다.
플레이어별 스냅샷에서 GetValue()를 호출한 후, 스냅샷과 연결된 플레이어는 해당 키 및 해당 키에 대해서만 실험에 등록됩니다. 이후의 모든 호출은 실험 기간 동안 동일한 제어 또는 변형을 반환합니다. 첫 번째 호출만 무작위입니다.
실험 등록은 신규 사용자로 제한되지 않습니다. 사용자가 이전에 GetConfigAsync()에서 값을 받았다 하더라도, 여전히 GetConfigForPlayerAsync()의 플레이어별 스냅샷을 사용하여 실험에 등록할 수 있습니다.
플레이어별 스냅샷의 키에 활성 실험이 없으면 GetValue()는 표준 구성 값을 반환합니다(값이 없으면 nil).
사용자 정의 등록
게임 내 상태를 기반으로 기준을 충족하는 플레이어만 등록하려면, 해당 기준을 확인하는 추가 코드를 작성한 후에만 GetValue()를 호출하여 실험에 등록해야 합니다. 다음 예를 고려해 보세요:
- 레이싱 게임에서 새로운 제어 방식을 테스트하고 싶습니다.
- 이 방식은 고급 플레이어를 위한 것이므로 많은 경기를 이긴 플레이어를 타겟팅하고 싶습니다.
코드는 다음과 비슷할 수 있습니다:
local function getControlScheme(player, racesWon)
if racesWon < 20 then
return "standardScheme"
else
-- 플레이어가 많은 승리를 거두었으므로 실험에 등록
local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)
if playerConfigSnapshot:GetValue("useNewControlScheme") then
return "newScheme"
else
return "standardScheme"
end
end
end제어 방식이 이후 세션에서도 지속되도록 하려면, 플레이어의 데이터 저장소 항목에 값을 추가해야 할 수 있습니다.
결과 보기 및 해석
보기를 클릭하여 세부정보 및 결과를 확인합니다. 세부정보 및 진행 탭에서 등록된 총 플레이어 수와 제어 값 및 각 변형을 받은 플레이어 수를 확인할 수 있습니다. 실험 초기에 이 페이지를 보는 것은 실험이 제대로 실행되고 있는지 확인하는 데 유용하지만, 조치를 취하기 위해서는 유용하지 않습니다. 조치를 취하기 전에 모범 사례를 참조하세요.

조기 피해 지표
첫 24시간 동안 또는 첫 번째 일일 결과가 도착할 때까지, 조기 피해 지표는 매 5분마다 업데이트되어 의도하지 않은 심각한 피해를 조기에 포착할 수 있습니다. 지표를 클릭하여 이러한 결과를 확인하세요. 빨간색으로 강조된 심각한 피해 지표를 찾으세요.
지표 위에 마우스를 올리고 신뢰도 보기를 클릭하여 신뢰 구간을 확인합니다.

이 기간 동안 결과는 피해만 테스트하므로 신뢰 구간에는 하한이 없고 상한만 있습니다. 지표가 심각한 피해로 표시되려면 전체 신뢰 구간이 심각한 피해 임계값 아래에 있어야 합니다. 다음 예에서 플레이 시간은 -12.67%이고 상한은 -2.73%입니다. 비록 추정치가 -10%의 심각한 피해 임계값보다 낮고 전체 신뢰 구간이 0% 아래에 있지만, 신뢰 구간이 피해 임계값 아래에 완전히 있지 않기 때문에 이 지표는 심각한 피해로 분류되지 않습니다.

이 결과는 첫 24시간 동안 조기 중지 결정을 안내하는 데만 사용하세요. 출시 결정에는 사용하지 마세요. 대신 일일 결과를 참조하세요.
조기 피해 임계값
각 지표에는 고유한 조기 피해 임계값이 있습니다. 변형의 상승이 이 임계값 아래로 떨어지면 해당 지표에 대해 심각한 피해로 분류됩니다. 그러나 변형과 제어 간에 등록된 플레이어가 10,000명 미만인 경우, 변형 상승은 표시되지만 피해에 대한 결정은 샘플 크기가 신뢰할 수 있는 피해를 감지할 수 있을 만큼 충분한 데이터를 제공할 때까지 이루어지지 않습니다.
| 지표 | 조기 피해 임계값 |
|---|---|
| 플레이 시간 | -10% |
| ARPU | -20% |
| 지불자 전환율 | -20% |
조기 피해 알림
실험의 조기 피해 분석 기간 동안 심각한 피해가 감지되면, 게임 소유자와 실험 소유자에게 조기 조치를 위한 알림이 전달됩니다. 알림은 이메일, Creator Hub 알림 트레이 및 선택적 웹후크를 통해 전달됩니다. 조기 피해 알림을 받은 후에는 실험 지표를 검토하고 실험을 조기에 중지할지 여부를 결정해야 합니다.

일일 결과
실험이 최소 24시간 동안 실행된 후, 결과를 클릭하여 최신 결과를 확인합니다. 결과는 매 24시간마다 업데이트됩니다. 목표 지표에서 통계적으로 유의미한 변화를 찾으세요. 대시보드는 이를 초록색 또는 빨간색으로 강조 표시합니다. 이러한 변화는 변형의 영향을 보여줄 가능성이 더 높고, 잘못된 긍정 또는 부정일 가능성이 적습니다.

지표가 통계적으로 유의미하다는 것은 그 백분율 변화에 대한 신뢰 구간이 0%와 겹치지 않는 경우입니다. 다음 예에서 ARPU는 2.37% 증가했으며, 하한과 상한은 각각 0.55%와 4.19%로, 이 변화는 통계적으로 유의미합니다.

편의를 위해 결과 페이지에서는 기본 구성 값을 실험의 변형 중 하나로 교체할 수 있습니다.
샘플 비율 불일치
실험이 예상 비율로 사용자들을 변형에 등록하지 못하는 경우, **샘플 비율 불일치 (SRM)**에 대한 경고 배너가 실험 결과 탭에 나타납니다. SRM이 감지되면 실험을 중지하고 다시 시작하는 것이 좋습니다.
SRM은 실험의 첫 24시간 동안 매 5분마다 확인되며, 이후에는 매일 확인됩니다. SRM은 실험 결과를 무효화할 수 있으므로, 손상되고 신뢰할 수 없는 결과를 기반으로 출시 결정을 내리지 마세요.

결정 내리기
실험이 종료되면 결정 내리기를 클릭하여 안내된 롤아웃을 시작합니다. Roblox는 통계적 유의성 및 실험 기간에 대한 경고를 표시한 후, 승리한 변형을 선택하거나 제어를 유지하도록 요청합니다. 선택에 따라 Roblox는 영구 구성에 적절한 변경 사항을 롤아웃합니다. 구성 페이지로 돌아가면 새로운 값을 확인할 수 있습니다. 마음이 바뀌면 승자 변경을 클릭하세요.
실험을 완료할 때 구성에 미해결된 단계 변경 사항이 있는 경우, Roblox는 이를 임시로 저장하고 롤아웃 후 최선의 노력으로 복원합니다.
여러분의 결정은 Roblox가 제안하는 구성 변경 사항을 결정합니다:
제어: Roblox는 기존 구성에 아무런 변경도 하지 않습니다.
비타겟 변형: 변형 값이 구성의 새로운 기본값이 됩니다. Roblox는 해당 구성 키에 대한 모든 다른 조건을 제거하지만, 전역 조건 목록에는 남아 있습니다.
타겟 변형: Roblox는 승리한 규칙을 영구 구성에 통합하며, 이 우선 순위 순서에서 첫 번째 적용 가능한 옵션을 사용합니다:
- 덮어쓰기: 동일한 조건이 구성의 맨 위에 이미 있는 경우, Roblox는 그 값을 승리한 변형의 값으로 덮어씁니다.
- 기존 추가: 일치하는 전역 조건이 존재하고 자연스럽게 맨 위에 위치할 경우, Roblox는 변형의 값으로 구성에 추가합니다.
- 승격: 일치하는 전역 조건이 안전하게 가장 낮은 순위로 승격되어 이 구성에서 최상위 규칙이 될 수 있는 경우(다른 구성에 영향을 주지 않고), Roblox는 이를 구성에 추가하고 전역적으로 재정렬합니다.
- 새로 만들기: 그렇지 않으면, Roblox는 구성에서 현재 사용 중인 가장 높은 조건보다 한 단계 높은 순위의 새로운 전역 조건을 생성합니다. 이로 인해 구성 내에서 중복 규칙이 생성되면, Roblox는 전역 규칙을 유지하면서 중복 조건 값을 제거합니다.
실험을 위한 모범 사례
**최소 감지 효과 (MDE)**를 사용하여 실험을 실행할 가치가 있는지 결정하세요.
Roblox는 목표 지표와 변형당 플레이어 수를 사용하여 MDE를 계산합니다. 이는 일일 활성 사용자, 롤아웃 비율, 실험 기간 및 변형 분할을 기반으로 합니다. 목표 지표에 대한 MDE가 너무 높으면(예: 100% 이상) 통계적 유의성에 도달할 가능성이 낮습니다. 일일 활성 사용자가 1,000명 미만인 게임은 실험에서 유용한 데이터를 얻기 어려울 수 있습니다.

가설로 시작하세요. 변수를 변경하고 결과를 확인하는 대신, 변경한 내용, 예상되는 결과 및 그 이유에 대한 원인과 결과의 진술을 작성하세요. 실험을 더 많이 진행할수록, 결과에 동반할 서면 가설 세트를 갖는 것이 사고를 명확히 하고 새로운 실험 아이디어를 촉발하는 데 도움이 될 수 있습니다.
실험이 전체 기간 동안 실행되도록 하세요. 새로움 효과(변화에 대한 일시적인 관심, 더 나은 것이 아니라 단순히 새롭기 때문에)는 초기 결과를 심하게 왜곡할 수 있으며, 때로는 통계적 유의성을 오르내리게 할 수 있습니다. 실험을 조기에 종료하면, 더 많은 데이터가 부드럽게 하거나 심지어 반박할 수 있는 비정상적인 급증에 기반하여 조치를 취할 확률이 높아집니다.
통계적 유의성이 없으면 행동하지 마세요. 플레이어 행동의 변화가 보이는 것처럼 보일지라도, 일반적으로 샘플 크기가 작기 때문에 통계적으로 유의미하지 않을 수 있습니다. 변화가 통계적으로 유의미하지 않다면 무시하세요.
실험 중에는 변경을 피하세요. 주요 버그는 물론 수정이 필요하지만, 게임 콘텐츠의 변경은 플레이어 행동에 영향을 미치고 결과를 무효화할 수 있습니다. 변경이 실험과 관련이 없어 보이더라도 마찬가지입니다. 또한, 실험이 서로 상호작용하지 않을 것이라고 확신하지 않는 한 동시에 여러 실험을 실행하지 마세요.
신뢰 구간을 사용하여 지표를 깊이 분석하고 통계적 유의성의 경계 사례를 확인하세요. 신뢰 구간이 너무 넓으면 지표가 통계적 유의성에 도달하지 못할 수 있습니다.
하나의 지표가 유의미하게 상승하고 다른 하나가 유의미하게 하락하면, 무역의 가치가 있는지 결정해야 합니다. 이는 다른 통계적으로 유의미한 움직임과 함께 고려할 수 있습니다.
실험은 강력한 신호를 제공하지만, 통계적 유의성은 확률에 관한 것이지 확실성에 관한 것이 아닙니다—따라서 신뢰 구간이 있습니다. 데이터 변동성, 샘플 크기 및 변화의 크기 모두 플레이어 행동에 변형이 영향을 미쳤는지 감지할 확률에 영향을 미칩니다. 실험 결과를 기반으로 취하는 모든 조치는 플레이어 피드백 및 게임에 대한 전반적인 비전과 같은 정성적 데이터와 균형을 이루어야 합니다.
발견 및 결정을 문서화하세요. 추가 실험을 실행하는 데 사용하지 않더라도, 지식과 증거의 본체를 갖는 것은 게임 디자인에 도움이 될 수 있습니다.