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

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

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

마지막 단계는 일정 설정입니다. 실험을 즉시 시작하거나 나중의 날짜와 시간으로 예약할 수 있습니다. 실험을 예약한 후에는 구성(기간, 롤아웃 비율, 변형 등)을 변경할 수 없지만, 다시 예약할 수 있습니다.
지표
실험은 실험 기간 동안 다음의 모든 지표를 추적합니다.
| 지표 | 설명 |
|---|---|
| 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시간 동안 실행된 후, 보기를 클릭하여 세부정보 및 결과를 확인합니다.

등록된 총 플레이어 수와 제어 값 및 각 변형을 받은 플레이어 수를 확인할 수 있습니다. 실험 초기에 이 페이지를 보는 것은 실험이 제대로 실행되고 있는지 확인하는 데 유용하지만, 조치를 취하기 위해서는 유용하지 않습니다. 조치를 취하기 전에 모범 사례를 참조하세요.
실험이 완료된 후, 결과 탭을 확인하세요. 대시보드에서 강조 표시된 목표 지표의 통계적으로 유의미한 변화를 찾으세요. 이러한 변화는 변형의 영향을 보여줄 가능성이 더 높고, 잘못된 긍정 또는 부정일 가능성이 적습니다.

어떤 지표 위에 마우스를 올리면 신뢰도 보기 버튼이 표시되어 신뢰 구간을 보여줍니다.
지표는 그 백분율 변화의 신뢰 구간이 0%와 겹치지 않을 때 통계적으로 유의미합니다. 다음 예에서 D1 유지율은 17.4% 증가했으며, 하한과 상한은 각각 8.02%와 22.03%로, 이 변화는 통계적으로 유의미합니다.

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

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