Pruebas A/B de ingresos
Los totales de ingresos por sí solos pueden favorecer la variante que recibió más tráfico. Registre la asignación, la exposición y los ingresos completados para que pueda comparar los ingresos por visitante expuesto y evaluar la incertidumbre.
Normalice los ingresos por exposición antes de decidir si un tratamiento produjo un aumento significativo.
1. Definir el experimento
Antes del envío, anote:
- un identificador de experimento estable;
- las variantes de control y tratamiento;
- la unidad de asignación, como visitante, usuario o equipo;
- las métricas primarias y las métricas de barandilla;
- un tamaño mínimo de muestra, duración de la prueba y regla de detención.
Un sujeto debe permanecer en una variante durante la vida del experimento.
2. Inicializar Telemetry
npm install telemetry-sh
import telemetry from "telemetry-sh";
telemetry.init(process.env.TELEMETRY_API_KEY);
3. Asignación y exposición de registros
Registre la exposición sólo cuando el sujeto pueda realmente experimentar el tratamiento.
const logExperimentExposure = ({ visitorId, variant }) => {
telemetry.log("experiment_events", {
event_name: "experiment_exposed",
experiment_id: "checkout_copy_v2",
visitor_id: visitorId,
variant, // "control" or "treatment"
});
};
Utilice un identificador interno en lugar de un correo electrónico, un valor de cookie u otros datos personales.
4. Registrar los ingresos completados
Registre las compras completadas que no sean de prueba en la misma tabla. Conserve la asignación original en lugar de buscarla en un campo que pueda cambiar más adelante.
const logPurchase = ({ visitorId, variant, orderId, revenueUsd }) => {
telemetry.log("experiment_events", {
event_name: "purchase_completed",
experiment_id: "checkout_copy_v2",
visitor_id: visitorId,
variant,
order_id: orderId,
revenue_usd: revenueUsd,
});
};
Decida de antemano cómo los reembolsos, las devoluciones de cargos, las suscripciones, las divisas y los pedidos repetidos afectan a la métrica.
5. Compara los resultados del experimento
Los ingresos por visitante expuesto evitan que el tráfico desigual decida el resultado. Esta consulta crea una fila por visitante antes de agregar cada variante:
WITH per_visitor AS (
SELECT
visitor_id,
variant,
MAX(CASE WHEN event_name = 'experiment_exposed' THEN 1 ELSE 0 END)
AS was_exposed,
SUM(CASE WHEN event_name = 'purchase_completed' THEN revenue_usd ELSE 0 END)
AS visitor_revenue_usd
FROM experiment_events
WHERE experiment_id = 'checkout_copy_v2'
AND timestamp_utc >= now() - INTERVAL '30 days'
GROUP BY visitor_id, variant
)
SELECT
variant,
SUM(CASE WHEN was_exposed = 1 THEN 1 ELSE 0 END) AS exposed_visitors,
SUM(CASE
WHEN was_exposed = 1 AND visitor_revenue_usd > 0 THEN 1 ELSE 0
END) AS buyers,
ROUND(SUM(visitor_revenue_usd), 2) AS total_revenue_usd,
ROUND(
SUM(visitor_revenue_usd) /
NULLIF(SUM(CASE WHEN was_exposed = 1 THEN 1 ELSE 0 END), 0),
2
) AS revenue_per_exposed_visitor_usd,
ROUND(
100.0 * SUM(CASE
WHEN was_exposed = 1 AND visitor_revenue_usd > 0 THEN 1 ELSE 0
END) /
NULLIF(SUM(CASE WHEN was_exposed = 1 THEN 1 ELSE 0 END), 0),
2
) AS purchase_conversion_pct
FROM per_visitor
WHERE was_exposed = 1
GROUP BY variant
ORDER BY variant;
6. Evaluar la incertidumbre
No declare un ganador basándose únicamente en la estimación puntual. Las distribuciones de ingresos suelen estar sesgadas, por lo que se deben exportar los resultados a nivel de visitantes para obtener un intervalo de confianza o un modelo estadístico adecuado. Mantenga la regla de decisión preespecificada con el análisis.
Antes de confiar en el resultado, verifique:
- discrepancia en la proporción de muestras;
- visitantes asignados a múltiples variantes;
- eventos de pedidos duplicados;
- transacciones de prueba, reembolsos y monedas mixtas;
- si ambas variantes tuvieron el mismo tiempo para convertirse;
- movimiento en métricas de barrera como la tasa de error o la latencia.
Próximos pasos
Guarde la consulta revisada y la definición del experimento juntas para que el gráfico no se desvíe de su denominador. Utilice receta de embudo de activación de registro para hitos anteriores del producto y adopción de funciones antes de la actualización para una vista de expansión no experimental.