Статья с разбором игры известной торговой сети вызвала у нас в Cloud4Y живой интерес. Вот небольшие отрывки, чтобы ввести вас в курс дела:
Однажды, солнечным весенним утром, почитывая городской форум, я наткнулся на ссылку с простенькой игрой от известной торговой сети. Игра (акция), посвящённая чемпионату мира по футболу, представляла собой незамысловатое поле три на три, заполненное футбольными мячами. Кликая по мячу, мы открывали картинку с тем или иным товаром. При открытии трёх одинаковых картинок участнику гарантировалось бесплатное получение данного товара в одном из магазинов сети. Также под одним из мячей имелось изображение красной карточки, открытие которой означало конец игры.

Автор статьи принялся расследовать причины своего проигрыша и по результатам расчетов выяснил следующее:
Быстрый набросок формул на салфетке, и выяснилось, что вероятность выигрыша — 1/4. Для 5 полей пришлось повозиться, но расчётная вероятность получилась также 25%.
...
Запустив скрипт, я получил неожиданный результат — 25% выигрышей. Поиграв с количеством выигрышных элементов и общим количеством полей, я выяснил, что вероятность выигрыша в подобной игре не зависит от количества полей и равна единице, поделенной на количество выигрышных элементов, увеличенных на единицу.
Нас заинтересовала правильность такого расчета и, заменив салфетку на Excel, мы взялись за дело в поисках математической истины. Читателей, увлекающихся теорией вероятности, приглашаем под кат, дабы проверить правильность наших вычислений.

Прежде всего выясняем правила игры. В этом нам, сам того не зная, помог пользователь Хабра Stecenko в своем комментарии. Также он пишет:
Если посмотреть скрипт автора, то он написан из предположения, что на поле ОБЯЗАТЕЛЬНО есть три карточки одного товара, по одной карточке еще пяти других товаров, и одна красная карточка, в то время как из описания игры этого абсолютно не следует — в правилах не сказано, что на поле обязана присутствовать выигрышная комбинация.
В правилах, однако, сказано, что всего участвует 26 товаров. Получается, что генерируется выдача из 9 карт: 8 карт — это сочетания 26 товаров с повторениями, а одна карточка красная.

В таких условиях расчет математической вероятности выигрыша несколько сложнее, чем предположил автор оригинального поста. Игра состоит из нескольких слоев:

  • Вероятность открыть N карт, не открывая красную — вероятность разной продолжительности игры без учета будет ли приз.
  • Вероятность собрать комбинацию из 3 карт с одинаковыми товарами. Эта вероятность изменяется при разной продолжительности игры. Важно понимать, что набор из 8 карт с товарами и всегда одной красной не обязательно содержит хотя бы одну пару одинаковых карточек, не говоря о сразу трёх.

Начнём с простого — с понимания как будет уменьшаться число участников при росте числа открытых ими карт из-за правила красной карточки.

Шансы разной продолжительности игры


Мы вычисляем, насколько вероятно, что за N испытаний (открытых карточек) будет открыта красная.

UPD: Первоначально мы рассчитывали вероятность открыть красную с помощью биномиального распределения. Это не гарантировало нам строго 1 красную карточку, при таком распределении вероятнее всего была одна красная карточка, но их могло быть как 0, так и все 9 с очень-очень маленькой вероятностью. Опять же, спасибо Stecenko за то, что в комментарии указал нам на ошибку и предложил верное решение.



В последнем столбце показано сколько игроков из ста остаются в игре с такой продолжительностью. Остальные игроки выбывают по причине красной карточки, так и не узнав, была ли выигрышная комбинация в выданном наборе карточек.

Теперь рассчитаем вероятности собрать комбинацию из трех карточек с одинаковыми товарами. Это является условием получения приза.

Шансы на призы


Разложим игру логически. Мы открываем первую карту, а затем под эту карту подбираем пару, под пару подбираем тройку. С таким подходом мы можем рассчитать вероятность получить 3 одинаковых карты за три или больше попыток, исходя из того, что всего товаров в игре 26.

Для задач с фиксированным числом тестов или испытаний, если результатом любого испытания может быть только успех или неудача, испытания независимы, а вероятность успеха остается постоянной в течение всего эксперимента будем использовать формулу Бернулли — в Excel функция БИНОМ.РАСП.

С помощью функции БИНОМ.РАСП можно вычислить, например, вероятность того, что двое из трех следующих новорожденных будут мальчиками. Какова вероятность открыть три одинаковые за три попытки?

=БИНОМ.РАСП(3;3;1/26;0) по маске
=БИНОМ.РАСП(число_успехов; число_испытаний; вероятность_успеха; интегральная)

Или вот формула для расчета вероятности получить 3 одинаковых и определенных товара за 8 попыток.

=БИНОМ.РАСП(3;8;1/26;0), так?

Не совсем. Когда мы достигли продолжительности игры в 4 испытания, не допустив открытия красной и продолжая играть, мы получаем ситуацию с возможностью двух пар для подбора выигрышной тройки.

Условно два товара из 26 — это А и Б. Наши открытые карточки А-Б-А-Б. Вероятность больше не 1/26, а 1/26+(1/26)*«Вероятность двух пар при данной продолжительности игры».

Вероятность двух пар при данной продолжительности игры = БИНОМ.РАСП(2;5;1/26;0)^2

При достижении большей длины игры к 7 попытке у нас появляется комбинации типа А-Б-А-Б-В-В. Это означает, что вероятность теперь равна

=1/26*(1 +БИНОМ.РАСП(2;7;1/26;0)^2 +БИНОМ.РАСП(2;7;1/26;0)^3) и мы ищем третью карту для 1, 2 или трёх пар.

UPD: Также первоначально мы не учли, что первая попытка в нашем расчете выигрыша, очищенного от вероятности выбрать красную, — это открытие любого из 26 товаров, а значит 100% успех. Количество повторов товара в матрице это количество совпадений с любым одним товаром, а значит для выигрыша достаточно двух повторов к одному товару, а не совпадения 3 с определенным загаданным результатом. Таким образом, первый выбор любой карты и две попытки подобрать ещё две такие же образуют в сумме три эксперимента.

Зная вероятности, мы строим матрицу:



В ней мы находим вероятность каждого максимального количества повторов какого-либо товара для каждого варианта продолжительности игры. Помним, что вероятность выигрыша меняется на 4 попытке и на 7, а значит учитываем это в формуле БИНОМ.РАСП

Нам нужны варианты с максимальным количеством повторов какого-либо товара 3 и более. Так как игра прекратиться, как только мы соберем тройку, мы складываем вероятности по столбцам в области, выделенной жирным шрифтом.



Далее мы перемножаем шансы каждой продолжительности игры на шансы выиграть приз при такой продолжительности. Суммируя эти произведения, мы получаем вероятность 0,0192 или 192 победителя на 10000 игроков.

Да, действительно это очень низкая вероятность. Совсем не 25%. Снова обратимся к правилам игры:
8. Призовой фонд:

8.1. Доступные призы: названия и количества

Итого 166000
116000 делим на вероятность выигрыша и получаем около 6 млн участников для того, чтобы разыграть все призы. Напомним, что на 1 января 2018 года по оценке Росстата в России было 146 938 921 постоянных жителей. Видимо, такова задумка организаторов игры — предоставить шанс выиграть почти каждому гражданину России.

UPD: Итоговая вероятность изменилась после внесенных правок. Сейчас мы можем проверить наши вычисления на практике с помощью скриптов, но удивителен Божий дар ума математиков-теоретиков предыдущих поколений, которые рассчитывали такое количество вероятностей, находя верное решение на бумаге и с помощью мысленных экспериментов.

Анализ кода показал автору оригинальной публикации, что скрипт ещё до начала игры “знает” её итог, однако никто не знает какой предопределенный результат выдаст скрипт конкретному пользователю. Зная математическую сторону вопроса, вы сможете сами сделать вывод о честности организаторов.

Комментарии (20)


  1. Daemonis
    05.06.2018 18:23

    Почему в первой строчке первой таблицы вероятность открыть красную равна вероятности не открыть?


    1. Cloud4Y Автор
      05.06.2018 18:43

      Сместилось при оформлении. Заменили. Там количество выбывших. Вероятность красной на долю оставшихся.


      1. Daemonis
        05.06.2018 19:00

        «Остальные игроки выбывают по причине красной карточки, так и не узнав, была ли выигрышная комбинация в выданном наборе карточек.»
        В некоторых случаях игроки узнают, что ее не было, открыв 7 карт :)


      1. Daemonis
        05.06.2018 19:11

        Ну и, вообще говоря, вероятности выпадения предметов меняются по мере того, как призы выигрываются.


  1. Mnilionic
    05.06.2018 18:44

    … предоставить шанс выиграть каждому гражданину России.

    Или: Каждый выигравший гражданин России лишает шанса выиграть 1000 других граждан.
    Ведь с каждым очередным выигрышем «фонд» счастливых комбинаций уменьшается. Влияет ли это на шанс победы? Значит ли это, что при старте акции будут максимальные шансы?


  1. vassabi
    05.06.2018 19:01
    +1

    у меня сокурсник писал на заказ мини-игры для мобилок и сайтов такого же типа.
    Так вот — на поле нигде нет никаких предопределенных картинок, выигрышных комбинаций и т.д., а есть только сигнал от сервера — «выигрыш» и «проигрыш». Если первое — то куда бы ты не нажимал, клиент игры сделает тебе выигрыш, а если второе — то проигрыш, вот и все.

    UPD: не, разумеется, где-то есть ребята, которые честно отдают все «на волю случая» и честный рандом.


    1. equity
      05.06.2018 19:08

      Думаю 145 млн или вся Россия не ожидаются в участниках


    1. khim
      05.06.2018 22:02

      Так вот — на поле нигде нет никаких предопределенных картинок, выигрышных комбинаций и т.д., а есть только сигнал от сервера — «выигрыш» и «проигрыш».
      Видел одну подобную игру, где выигрыши были разными, бросались три кубика. При этом первые два всегда были выпадали на одинаковые числа. Ну а действительно — чего париться-то?

      Так что успокойтесь: вероятность выигрыша не имеет вообще никакого отношения к вашим рассчётам, она задаётся организаторами аукциона. Всё остальное — антураж.

      UPD: не, разумеется, где-то есть ребята, которые честно отдают все «на волю случая» и честный рандом.
      Я много слышал про такое, но ни разу не видел.


      1. ainoneko
        06.06.2018 08:17

        Я много слышал про такое, но ни разу не видел.
        Потому что это
        фантастика
        Роберт Асприн, Питер Хек, «Нет Шутта шуттее старого Шутта»
        Спойлер!
        Что может получиться, когда казино играет честно.


  1. Stecenko
    05.06.2018 19:48
    +1

    Так не известно же, красная карточка обязательно есть на поле, или нет.

    Если исходить из предположения, что красная карточка ОБЯЗАТЕЛЬНО присутствует в игре, то вероятность открыть красную карту зависит от предыдущего хода, и составит на:
    1 ходу — 1/9
    2 ходу — 1/8 (т.к. одна хорошая карта выбыла)
    3 ходу — 1/7

    8 ходу — 1/2
    9 ходу — 1.
    Т.е. если мы открыли 8 карточек, то последняя — 100% красная.
    Соответственно вероятность не попасть на красную при открытии:
    3 карт = 8/9*7/8*6/7 = 6/9
    4 карт = 6/9*5/6 = 5/9
    5 карт = 5/9 *4/5 = 4/9

    8 карт = 1/9
    9 карт = 0
    Соответственно, все дальнейшие расчеты надо будет пересчитывать.

    Или вот формула для расчета вероятности получить 3 одинаковых товара за 8 попыток =БИНОМ.РАСП(3;8;1/26;0), так?

    Эта формула вычислит вероятность 3 успешных исходов из 8 попыток, при вероятности одного исхода в 1/26.
    И она не применима для нахождения вероятности выпадения трех одинаковых товаров при выборе 8 товаров из 26 с возвратом.
    Сорри за отсутствие доказательства неприменимости, здесь должен быть анекдот:
    Василий Иванович, а почему ты ушел из академии?
    Понимаешь, Петька, слаб я в математике. Вот спрашивает меня преподаватель, сколько будет 0,5+0,5. Нутром чую — литр, а математически доказать не могу!


    1. equity
      05.06.2018 19:54

      Там вероятность «не дожить», вероятность что 1 из числа открытых красная.


      1. Stecenko
        05.06.2018 20:01

        Первая таблица, вероятность открыть красную карту, а не вероятность что 1 из числа открытых карт красная.
        Для 8 карты вероятность должна быть 1/2 (т.к. 7 карт уже открыты), а не 38%.
        Вероятность что 1 из числа открытых красная равна число открытых карт делить на 9.


    1. Cloud4Y Автор
      05.06.2018 20:52

      Там рассчитывается, что 1 например из 5 следующих будет красной. Или 1 из 8. Какая вероятность, что при таком числе открытых карт игрок уже выбыл. Но вы правы при таком расчете вероятность красной всегда 1/9, а значит может быть 0 на 9 или 2 на 9. Ваш вариант вернее. Хотя увидеть вторую красную невозможно и полностью проверить правило 1 красной на практике.

      По второй части не понял доводов.


      1. Cloud4Y Автор
        05.06.2018 21:14

        Коротко — наш расчет с биномиальным распределением не гарантирует строго 1 красную карточку, но игра не гарантирует необходимость открытия всех 9 карт.


        1. Nubus
          06.06.2018 04:45

          Вы смешали теорвер из 2х позиций. Первая-формула Бернулли тут применима только касательно каждой карточки, но не каждой клетки на карточке.
          Каждая клетка на карточке не может быть описана формулой бернулли так-как есть 2 разных варианта получить проигрыш: красная карточка ИЛИ отсутствие выигрышной комбинации. То есть вилка событий будет Q=1-(p+x) где X соотношение пустышек к общей массе билетов.

          В процессе игры с учетом наличия только одной красной карточки на поле (указано в правилах) вероятность открытия оной будет q=1-p, где p это шанс на обычную карту. То есть вероятность красной карточки на первой клетке: q=1-(8/9).
          Шанс Q уже неизвестен его НЕВОЗМОЖНО рассчитать так-как неизвестно максимальное число билетов. То есть нигде не сказано что шанс выиграть какой-либо предмет X из Y, так-же нет указания максимального количества попыток.


    1. kromm
      05.06.2018 22:15

      Набросал скрипт независимо от вашего, результаты те же, так что автор статьи где-то сильно ошибается.

      Если одна красная карточка обязательно присутствует на поле, то вероятность выигрыша получается 1.8%
      Если не обязательно, а выпадает с такой же вероятностью как и остальные товары — то 5.3%


    1. Cloud4Y Автор
      06.06.2018 08:01

      Проверили скриптом вторую часть задачи. Полная вероятность собрать комбинацию 3 и более одинаковых карт из 8 получилась 0,07, что примерно равно теоретической вероятности (в этой части не учитывается возможность выпадения красной). Далее мы перемножили вероятность победы для каждой продолжительности игры на вероятность такой продолжительности по причине красной карты, но в итоге получили 0,77%, а не 1,8% как получилось у вас.

      Наше решение действительно предполагает возможность не выиграть уже в момент сдачи карт, как пишет apirk habr.com/company/cloud4y/blog/413333/#comment_18738541 это противоречит коду игры. У вас в скрипте была возможность не выиграть по причине отсутствия троек в выданном наборе?


      1. Cloud4Y Автор
        06.06.2018 08:32

        Пересчитали, получилось 1,9%


  1. Stecenko
    05.06.2018 20:03
    +1

    И да, после 11 июня призываю в комментарии (а лучше отдельным постом) Организаторов акции, со статистикой, результатами, комментариями и рассказом о логике скрипта.


  1. apirk
    06.06.2018 05:51

    Есть одна проблема. В оригинальной игре действительно на поле присутствуют 3 одинаковых элемента, игра после проигрыша показывает, «где они были», и что мог выиграть игрок. В JSON присутствует параметр

    "PotentialPrizeImage":{"Type":1,"Name":"BB41C343ECEBCB0030F1F93A1F9E43CA.png"}

    Так что вся статья неприменима к конкретной игре. Извините.