Посчитать общую конверсию по сегментам очень разного размера
segments — список пар (conversions, visitors), по одной на сегмент. Верните общую конверсию по всем сегментам вместе. Сегменты сильно различаются по размеру — у одних миллионы визитов, у других единицы.
Верните 0.0, если визитов вообще нет.
def overall_conversion(segments: list[tuple[int, int]]) -> float:
# ваш код здесь
Напишите реализацию.
Общая конверсия — сумма конверсий делить на сумму визитов, то есть среднее, взвешенное по размеру, а не среднее посегментных ставок. Усреднение даёт сегментам равный вес, и крошечный сегмент искажает итог.
- ✗Усреднять посегментные ставки, будто сегменты одного размера
- ✗Взвешивать не по числу визитов, а по чему-то ещё
- ✗Забывать, что малый сегмент может качнуть простое среднее
- →Когда простое среднее совпадёт со взвешенным?
- →Как взвесить по выручке вместо визитов?
Sum the conversions and sum the visitors across all segments, then divide — this is the size-weighted average. Never average the per-segment rates directly.
def overall_conversion(segments):
total_conv = sum(c for c, v in segments)
total_vis = sum(v for c, v in segments)
return total_conv / total_vis if total_vis else 0.0
For [(5, 10), (900, 10000)] the weighted rate is 905 / 10010 ≈ 0.0904. The simple mean of the rates would be (0.5 + 0.09) / 2 ≈ 0.295 — more than triple the truth, because the 10-visitor segment is given the same weight as the 10 000-visitor one.