Алгоритм социальной сетевой игры
Выбор целевой переменной, которая отвечает за наиболее оптимальную рассадку. Игровые и неигровые показатели пользователей. Очистка данных от выбросов и некорректной информации. Комбинации между кластерами за столом на основе данных об играх пользователей.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 07.09.2018 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
· BrainHex:
daredevil/conqueror
· Модель для покера:
passive-aggressive, tight-loose
call_percent
% раздач, в которых пользователь сделал call
· Классификация Бартла:
карьеристы
· BrainHex:
daredevil
· Модель для покера:
passive-aggressive
· Расширенная модель для покера:
calling station
check_percent
% раздач, в которых пользователь сделал check
· Классификация Бартла: исследователи
· Модель для покера:
passive-aggressive
fold_percent
% раздач, в которых пользователь сделал fold
· Классификация Бартла карьеристы
· Модель для покера:
passive-aggressive
· Расширенная модель для покера:
rock
raise_percent
% раздач, в которых пользователь сделал raise
· Классификация Бартла убийцы
· BrainHex:
daredevil
· Модель для покера:
passive-aggressive
· Расширенная модель для покера:
the maniac
session_win_rate
Соотношение раздач, в которых пользователь выиграл, к общему количеству раздач
· BrainHex
mastermind/conqueror
· Расширенная модель для покера:
noob, sharks
avg_move_time
Соотношение среднего времени хода игрока к среднему ходу за столом
· Классификация Бартла исследователи
· BrainHex
daredevil/mastermind
user_perc_by_cash
Среднее соотношение количества фишек у игрока за столом к общему числу фишек за столом
· Классификация Бартла убийцы
· BrainHex
сonqueror
user_agree_raise
Соотношение количества раздач, где игрок поднимает ставки, к количеству раздач, где он их поддерживает
· Классификация Бартла убийцы
· BrainHex
daredevil/conqueror
· Модель для покера:
passive-aggressive
· Расширенная модель для покера:
the maniac, sharks
user_won_chips
Соотношение выигрыша фишек к начальной ставке
· BrainHex
conqueror
user_won_coins
Соотношение выигрыша монет к начальной ставке
· BrainHex
conqueror
user_pot_variation
Модуль коэффициента вариации показателя user_pot
· Классификация Бартла убийцы
· BrainHex
survivor
· Модель для покера:
passive-aggressive
· Расширенная модель для покера:
the maniac
user_cash
% фишек, которые пользователь берет с собой в игру (от общего количества фишек игрока)
· Классификация Бартла
убийцы
· BrainHex
survivor/conqueror
fold_loop
Насколько осторожно играет с плохими картами: на каком кругу фолдит
· Классификация Бартла
карьеристы
· BrainHex
survivor/daredevil
· Модель для покера:
tight-loose
· Расширенная модель для покера:
rock
user_level
Отношение среднего уровня игрока к среднему уровню противников
· Классификация Бартла
карьеристы
· BrainHex
conqueror
· Расширенная модель для покера:
noob
crupie_tip
% игр, в которых пользователь дал «на чай» крупье
· Классификация Бартла
социальщики
· BrainHex
socialiser
respect_gift
% игр, в которых игрок дарил респекты
· Классификация Бартла
социальщики
· BrainHex
socialiser
Таким образом, подготовленный набор полей позволяет выявить различные типажи игроков по любой из рассмотренных классификаций. Стоит учесть, что чаще всего пользователи принадлежат не к одной группе, а имеют признаки нескольких.
С каждой новой раздачей пользователь получает новые знания и лучше понимает игру, поэтому следует группировать лишь последние сессии пользователей. Однако, стоит учесть, что бывают ситуации, когда у игрока мало времени, и он готов сыграть лишь пару раздач на мобильном телефоне, а, придя домой к компьютеру в более комфортную обстановку, потратить на сессию гораздо больше времени и, соответственно, более точно показать свое умение играть в покер.
Для определения периода группировки был использован датасет из 105531 сессии. Для окон от 5 до 50 сессий по каждому независимому параметру рассчитаны: интерквартильный размах и медиана. Далее была использована метрика, которая рассчитывается как сумма всех средних интерквартильных размахов по независимым переменных, разделенная на сумму медиан:
,
где j - количество сгруппированных сессий, i - независимый параметр (всего 20, см. Табл. 1), - интерквартильный размах i-го параметра, - медиана i-го параметра.
Так как требуется, чтобы в процессе группировки были максимально похожие наблюдения, которые отражали бы игру пользователя за последнее время, то необходимо выбрать период агрегации j, чтобы минимизировать параметр m.
Рис. 4. Метрика m при различных периодах агрегации j
Минимальное значение метрики m наблюдается при и составляет 0.33 (см. Рис. 4). Таким образом, был определен период агрегации - 37 сессий. В случае, если пользователь является новичком, то берутся все данные, которые мы имеем о его стиле игры. По мере увеличения объема информации, доступной о пользователе, при каждом заходе в игру его кластер будет пересчитываться.
Вторая проблема была решена с помощью использования при агрегации сессий не обычного среднего, а средневзвешенного - на основе количества раздач, которые были сыграны в сессию. Данный способ позволяет придать наименьший вес сессиям, в которых пользователь практически не играл (такое может часто случаться благодаря системе возврата игрока через push-уведомления на мобильных устройствах), и, наоборот, максимальный вес сессиям, где было сыграно большое количество раздач.
Как уже было отмечено в работе, k-means алгоритм чувствителен к выбросам. Поэтому, было принято решение ограничить отрезок, в который могут входить параметры. В случае, если значения выходят за его пределы, то используются граничные точки. Кроме этого, все переменные были стандартизированы с помощью применения преобразования, которое приравнивает среднее к нулю, а стандартное отклонение - к единице.
Центрирование и масштабирование происходят независимо для каждой фичи - соответствующая статистика вычисляется на обучающей выборке, фиксируется, и подсчитанные значения используются на новых данных. Данное преобразование занимает центральное место во многих алгоритмах машинного обучения: если независимые переменные имеют разные дисперсии, отличающиеся на порядок, то может возникнуть проблема доминирования фичей с большой дисперсией над другими.
Выводы
Данная глава посвящена определению инструментальных средств, необходимых для проведения исследования. В качестве языка программирования был выбран язык Python с IDE Anaconda и Jupyter. Основные библиотеки, которые были использованы - это Pandas, Numpy, Scipy, Sklearn. Во второй части сформирован датасет, учитывающий различные методы классификации пользователей, представленные в первой главе. Также был выбран период агрегации данных и решена проблема выбросов.
Глава 3. Анализ данных
3.1 Кластеризация пользователей
С целью определения количества кластеров была построена дендрограмма. При этом максимальная дистанция между объектами в пространстве признаков была выбрана 50. Таким образом, оптимальным количеством кластеров является 5 (см. Рис. 5). Кроме этого, данное количество подходит для оптимального разбиения игроков, чтобы в одно время в игру играло достаточное количество представителей каждого кластера.
Рис.5. Дендрограмма с максимальной дистанцией 50
Также был посчитан силуэт. Как уже было отмечено, выбирается такое значение количества кластеров, чтобы метрика была максимальной. График силуэта представлен на Рис.6. Максимальный силуэт составляет 0.122, что соответствует разбиению с 5 кластерами.
Рис. 6. Силуэт в зависимости от количества кластеров
Таким образом, для определения количества кластеров было использовано два алгоритма, которые показали одинаковые результаты - оптимально использовать 5 групп.
Для кластеризации в сравнении участвовали 2 алгоритма: K-means Clustering и Spectral Clustering. Хоть Spectral Clustering и является более совершенным алгоритмом, но он занимает значительно большее количество времени (18.3 секунды на обучающей выборке), чем K-means (137 мс на обучающей выборке), кроме этого, Spectral Clustering требует всю выборку при применении алгоритма, поэтому для разрабатываемой системы был выбран алгоритм K-means.
Таким образом, при внедрении данного алгоритма в промышленное использование, необходимо при каждом входе пользователя в игру производить определение текущего кластера, к которому он относится. Для этого необходимо разработать микро-сервис, включающий в себя несколько шагов определения группы:
1) Группировка показателей внутри сессии. Выполняется сервером игры при закрытии сессии и отсылается в микро-сервис для присваивания группы. Отправленные данные учитываются лишь при следующем заходе. Дальнейшие шаги выполняются непосредственно в микро-сервисе.
2) Очистка данных - выкидываются ненормальные наблюдения по ограничениям на метрику. В случае, если выбивается из заданных значений - используем граничные значения.
3) Усреднение по 37 последним игровым сессиям (если было сыграно меньше, то используются все). Метод агрегации - средневзвешенное с весами, равными количеству раздач за сессию.
4) Происходит нормализация: . При этом, статистика (среднее и стандартное отклонение) рассчитаны заранее и хранятся в сервисе как константы.
5) Рассчитывается Евклидово расстояние до центра каждого кластера (см. Табл. 2). Следующим шагом, необходимо определить кластер, как группа, до которой минимальное расстояние.
Табл. 2. Центры масс кластеров
0 |
1 |
2 |
3 |
4 |
||
metric_avg_move_time |
0.1622 |
0.1644 |
0.0555 |
0.2774 |
-0.3627 |
|
metric_call_percent |
-0.2342 |
-0.1914 |
0.0614 |
1.7863 |
0.6566 |
|
metric_check_percent |
0.1784 |
-0.3009 |
-0.0619 |
-1.3278 |
0.6819 |
|
metric_crupie_tip |
-0.1026 |
-0.0642 |
0.8692 |
-0.1146 |
-0.0937 |
|
metric_fold_loop |
0.7972 |
-0.0411 |
-0.2058 |
0.0482 |
-0.4442 |
|
metric_fold_on_allin |
0.8529 |
-0.3919 |
0.0944 |
-1.4423 |
0.4061 |
|
metric_fold_percent |
1.3136 |
-0.3263 |
-0.1968 |
-0.5600 |
-0.2471 |
|
metric_msg_percent |
-0.1459 |
0.2337 |
0.5928 |
0.1206 |
-0.2098 |
|
metric_raise_percent |
-0.6298 |
0.4513 |
0.1081 |
1.5767 |
-0.6546 |
|
metric_raise_to_allin |
-0.6708 |
0.3263 |
-0.0699 |
1.7863 |
-0.5779 |
|
metric_respect_gift |
0.0531 |
0.0444 |
0.6413 |
-0.0718 |
-0.0731 |
|
metric_session_win_rate |
-1.1816 |
0.5501 |
0.2311 |
0.7662 |
-0.1288 |
|
metric_user_agree_raise |
0.5268 |
-0.5821 |
0.0129 |
-1.3203 |
0.7453 |
|
metric_user_cash |
-0.6263 |
0.3487 |
-0.5472 |
1.1585 |
-0.3766 |
|
metric_user_level |
-0.0598 |
0.0844 |
-0.1025 |
0.1576 |
-0.1016 |
|
metric_user_perc_by_cash |
-0.3995 |
0.3341 |
0.3447 |
-0.3651 |
0.0310 |
|
metric_user_pot_prob_win |
-0.5352 |
0.5074 |
0.2292 |
0.4803 |
-0.3661 |
|
metric_user_pot_variation |
1.0317 |
-0.3586 |
0.0071 |
-1.2638 |
0.2043 |
|
metric_user_won_chips |
0.4007 |
0.0391 |
0.3795 |
-1.6656 |
0.3232 |
|
metric_user_won_coins |
0.0264 |
-0.0171 |
0.1221 |
-0.0376 |
0.0104 |
Как видно из Табл. 2, центры масс различных кластеров значительно отличаются, что может свидетельствовать о различии поведения игроков между группами. Полный цикл кластеризации, включающий перерасчет центр масс, необходимо производить раз в неделю. Стоит учесть, что результаты K-means кластеризации зависят от выбора начальных точек, поэтому был зафиксирован random seed.
3.2 Описание результатов кластеризации
Вся аудитория покера разбита на 5 кластеров. Кластеры получились сбалансированными и практически равными по размеру (см. Рис. 7).
Рис. 7. Размер кластеров (% от аудитории)
В каждом кластере можно сравнить средние значения метрик, на основе которых они были сформированы, с общей выборкой. В табл. 3 приведены средние значения по всей выборке в целом и по каждому кластеру в отдельности. Цветом выделены показатели, значимо отличающиеся от среднего по выборке (confidence level 99%). Для проверки различий был использован t-тест Стьюдента.
Табл. 3. Различия в средних между кластерами
Мет-рика |
Описание метрики |
Все данные |
Кл.0 |
Кл.1 |
Кл.2 |
Кл.3 |
Кл.4 |
|
raise_to_allin |
% игр, в которых пользователи идут первыми в all-in |
0.2 |
0.28 |
0.02 |
0.17 |
0.44 |
0.22 |
|
fold_on_allin |
% игр, в которых пользователи фолдят на all-in (от раздач, где all-in был) |
0.51 |
0.4 |
0.73 |
0.55 |
0.29 |
0.44 |
|
msg_percent |
% от общего числа сообщений в чате за сессию |
0.23 |
0.39 |
0.13 |
0.22 |
0.35 |
0.24 |
|
user_pot_prob_win |
Медианное соотношение суммы ставок к возможному выигрышу в сессии пользователя. |
0.5 |
0.8 |
0.36 |
0.49 |
0.6 |
0.42 |
|
call_percent |
Кол-во call по отношению к общему количеству кругов |
0.27 |
0.21 |
0.39 |
0.25 |
0.18 |
0.26 |
|
check_percent |
Кол-во check по отношению к общему количеству кругов |
0.23 |
0.19 |
0.29 |
0.23 |
0.14 |
0.23 |
|
fold_percent |
Кол-во fold по отношению к общему количеству кругов |
0.17 |
0.24 |
0.23 |
0.13 |
0.13 |
0.19 |
|
raise_percent |
Кол-во raise по отношению к общему количеству кругов |
0.32 |
0.36 |
0.08 |
0.38 |
0.53 |
0.32 |
|
session_win_rate |
Винрейт за сессию |
0.27 |
0.3 |
0.14 |
0.34 |
0.36 |
0.23 |
|
avg_move_time |
Среднее время пользователя по отношению к общему среднему |
0.9 |
0.94 |
0.7 |
0.93 |
0.98 |
0.88 |
|
user_perc_by_cash |
% кол-ва фишек у игрока за столом от общего числа фишек у игроков за столом |
0.22 |
0.17 |
0.17 |
0.3 |
0.22 |
0.16 |
|
user_agree_raise |
Отношение подъема ставок к поддержке (сам райзит или поддерживает) |
0.44 |
0.31 |
0.08 |
0.6 |
0.33 |
0.63 |
|
user_won_coins |
Cколько пользователь выигрывает-проигрывает монет по отношению к начальной ставке |
0 |
0 |
0.004 |
-0.01 |
-0 |
-0 |
|
user_won_chips |
Cколько пользователь выигрывает-проигрывает фишек по отношению к начальной ставке |
-0.01 |
-0.03 |
0.01 |
0.02 |
-0.03 |
-0.06 |
|
user_pot_variation |
Модуль коэффициента вариации в user_pot (как мера рискованности игрока) |
1.74 |
1.58 |
2.12 |
1.7 |
1.36 |
1.72 |
|
user_cash |
Сколько пользователь берет фишек за стол (% от общего числа фишек) |
0.5 |
0.62 |
0.3 |
0.42 |
0.63 |
0.68 |
|
fold_loop |
Насколько осторожничает с плохими картами - на каком кругу фолдит |
0.85 |
0.86 |
0.83 |
0.82 |
0.89 |
0.85 |
|
user_level |
С кем любит играть - с лоу-левелами или хай-левелами |
0.44 |
0.29 |
0.49 |
0.49 |
0.35 |
0.4 |
|
crupie_tip |
Процент игр, в которых игрок дал "на чай" крупье |
0.005 |
0 |
0.002 |
0.007 |
0.013 |
0.003 |
|
respect_gift |
Процент игр, в которых игрок дарил респекты |
0.032 |
0 |
0.024 |
0.037 |
0.039 |
0.03 |
|
Количество сессий по кластерам: |
1980809 |
15578 7.8% |
675941 34% |
612256 31% |
33672617% |
340308 17% |
||
Жирный шрифт - p-value <0.01 |
На основе найденных значимых отличий в средних по различным показателям, можно дать кластерам дополнительные содержательные характеристики.
Таким образом, полученные кластеры можно описать:
· Кластер 0 - собирательный кластер, к которому относятся все пользователи, не попавшие в другие.
· Кластер 1 - пользователи, которые играют осторожно.
· Кластер 2 - пользователи, которые не часто первыми идут в all-in, но играют агрессивно. При этом данные игроки достаточно эффективны и выигрывают больше, чем проигрывают.
· Кластер 3 - пользователи, которых не очень любят остальные кластеры: они часто идут в all-in, либо являются новичками в игре.
· Кластер 4 - пользователи, которые разумно играют в покер. Часто берут с собой почти на все фишки, которые у них есть. При этом достаточно агрессивны и иногда идут в all-in.
При этом, результатом данной кластеризации также является значимое различие в платежных показателях пользователей. Конверсия в плательщиков между кластерами отличаются (проверено с помощью биноминального теста, см. Табл. 4 и рис. 8).
Табл. 4. Различия в конверсии в плательщиков
Успех |
Попытки |
Конверсия (conf.inter. 95%) |
p-value |
Различия |
||
0 кл. |
640 |
26320 |
1.8% - 3.3% (2.4%) |
- |
- |
|
1 кл. |
3519 |
86553 |
3.9% - 4.2% (4.1%) |
< 0.0001 |
29% - 91% (67%) |
|
2 кл. |
2750 |
95056 |
2.8% - 3% (2.9%) |
0.22 |
-17% - 44% (19%) |
|
3 кл. |
1672 |
43413 |
3.6% - 4.1% (3.9%) |
0.0004 |
20% - 83% (58%) |
|
4 кл. |
1424 |
37754 |
3.5% - 4% (3.8%) |
0.0009 |
17% - 80% (55%) |
Рис. 8. Различия в конверсии в плательщиков
Таким образом, между кластерами были найдены значимые различия, что является подтверждением, что кластеры были определены верно.
3.3 Построение таблицы приоритетов для посадки игроков
При наличии алгоритма кластеризации пользователей есть возможность построить таблицу, включающую информацию по времени игры в зависимости от групп людей за столом. При этом рассматривается время игры до неизменного состояния стола (стейта) - если один из пользователей ушел или пришел новый игрок, то состояние стола изменилось, и таймер начинает отсчет заново. При этом, момент, когда пользователь встает из-за стола, но остается в комнате наблюдателем, также считается уходом из игры. Однако, в случае, когда игрок открыл банк, чтобы докупить монет, и при этом не пропускает своего хода, считается продолжением игры.
Данный подход, включающий в себя увеличение среднего времени игры за столом (что, вероятнее всего, приведет к увеличению среднего времени, проведенного пользователем в приложении), позволяет построить таблицу приоритетов, которая будет включать в себя столы, представленные кластерами игроков, находящимися за ними. Используя исторические данные, можно более детально проанализировать кластеры, которые играют значимо больше времени за столом, чем остальные.
Особенность анализируемой игры такова, что максимальная вместимость стола - 5 человек, при этом игра может начаться в том случае, когда собрались всего 2 человека. В процессе игры к столу может присоединяться или, наоборот, уходить пользователи.
В качестве исходного датасета были использованы данные по 140 миллиону раздач, которые были сыграны за месяц в техасский холдем различными пользователями, о которых достаточно данных, чтобы определить их кластер. Стоит учесть, что для объективности анализа использованы игроки, проводящие в покере совершенно различное время - и давно, и только что зарегистрировавшиеся. Так как за одним столом одновременно играют несколько человек, то в анализе участвовало около 507 тысяч различных состояний столов.
Кроме этого, исторически сложилось, что полные стейты столов (когда пользователи играют с 4 противниками) собираются довольно редко. Полученное среднее время, проведенное пользователями в том или ином стейте стола, приведено в Приложении 1. Также, в результате анализа, было выявлено, что некоторые стейты столов (например, где принимают участие большое количество представителей 0-ого кластера) собираются редко. Во-первых, подобные стейты, не являются репрезентативными, во-вторых, так как они встречаются довольно редко, то их не стоит закладывать в алгоритм (так как, предполагается, что в любой момент у алгоритма должен быть выбор между подходящими стейтами).
В данном подходе имеется проблема, связанная с текущей реализации алгоритма авто-посадки: состояния столов с малым количеством людей будут более вероятно разрушены, чем при полной посадке (так как алгоритм подсаживает людей к «малым» столам). Поэтому при дальнейшем развитии системы матчмейкинга требуется дополнительная метрика, показывающая, что пользователю нравится играть за столом.
В дополнении ко времени планируется учитывать:
· с положительной стороны: количество buy-in за столом, отношение совокупного банка к малому блайнду, количество раздач, сыгранное пользователем за неизменным состоянием стола;
· с отрицательной стороны: действия пользователя, который изменил состояние стола (игрок может покинуть стол по нескольким причинам: уйти в лобби, поменять стол на повышение ставок, поменял стол на понижение ставок, перейти на следующий стол, вернуться к предыдущему столу; кроме этого, игрок может просто присоединиться к столу).
Используя подобные данные, можно более точно оценить «качество» стола. Однако, статистика в настоящий момент собирается, поэтому анализ будет проведен, когда будет накоплено необходимое количество данных.
Так как покер является популярной игрой, то практически все стейты стола есть в любой момент времени. При анализе стационарности ряда со временем игры в зависимости от стейта учитывались новые данные, которые не были использованы ранее. В датасете содержится информация о 26 млн стейтов, которая была собрана в течение 15 дней. При этом, для анализа использованы лишь те стейты, которые встречались за каждые 12 часов не менее 100 раз и не менее 14 раз за 30 двенадцатичасовых отрезков. Данное требование было поставлено, чтобы отсеять из рассмотрения те стейты, которые собираются редко.
Подходящих под условие стейтов 232. Для проверки стационарности ряда был использован тест Дики-Фулера. Согласно результатам данного теста, 213 стейтов оказались стационарными, когда как лишь 19 - нестационарными (см. Приложение 2).
Стационарный ряд (стейт [1,1,2,4]) |
Нестационарный ряд (стейт [0,0,0,0,4]) |
Рис. 9. Пример стационарного и нестационарного стейта
Таким образом, в алгоритме не будут учитываться нестационарные ряды и стейты столов, которые редко собираются.
Была выявлена зависимость между стейтами, которые содержат те или иные кластеры, и временем игры за стейтом. В случае, если за столом есть представители кластера 4, то время значительно ниже, чем, когда их нет (см. Рис. 10).
Рис. 10. Среднее время
Кроме этого, заметно, что, чем больше представителей кластера 4 за столом, тем меньше игроки играют (см. Табл. 5). С точки зрения времени игры, наиболее предпочитаемым является кластер 1 и 2 - чем больше игроков из этих кластеров, тем больше времени стейт стола неизменен. Данный факт объясняется тем, что пользователи из кластера 3 и 4 часто идут в all-in, тем самым вынуждая кого-либо покинуть стол. Остальные же кластеры играют более осторожно.
Табл.5. Время игры за столом в зависимости от количества игроков соответствующего кластера
Кластер 1 |
Кластер 2 |
Кластер 3 |
Кластер 4 |
||
0 игроков |
47.66 |
39.43 |
60.30 |
66.79 |
|
1 игрок |
52.57 |
53.26 |
49.01 |
44.39 |
|
2 игрока |
57.91 |
75.33 |
42.31 |
34.88 |
|
3 игрока |
66.75 |
81.81 |
32.78 |
24.98 |
|
4 игрока |
69.10 |
92.56 |
31.75 |
16.79 |
Как было отмечено в первой главе, один из наиболее важных показателей игры и здоровья бизнеса - LTV. Данная функция, на самом деле, является производной от двух других: сколько пользователь тратит за промежуток времени и ретеншена. Так как показатель возврата в игру зависит от удовлетворенности пользователей, то повышение user experience (UX) позволит улучшить данную метрику. Оптимальная посадка за стол для человека, учитывающая его игровое поведение - это один из способов доставить ему больше удовольствия от игры, а значит, улучшить его retention, что, в свою очередь, приведет к увеличению LTV.
Выводы
В данной главе произведена кластеризация пользователей, в ходе которой определено оптимальное количество кластеров с точки зрения метрики силуэта и иерархической кластеризации. Описаны результаты кластеризации и даны описания получившихся кластеров с учетом значимой разности между параметрами внутри кластеров и всей выборкой. Построена таблица, описывающая время игры между различными кластерами за одним столом. Данное время игры можно представить в виде временных рядов, стационарность которых была проверена в ходе анализа полученных результатов.
Заключение
Таким образом, все поставленные задачи данного исследования были выполнены:
· в работе выбрана целевая переменная, которая позволяет определить оптимальную рассадку игроков - общее время, сыгранное за неизменным стейтом стола;
· разработанный алгоритм должен улучшить retention, lifetime, количество сыгранных раздач, что, в свою очередь, приведет к росту LTV пользователей;
· благодаря анализу различных моделей пользователей, определены основные игровые и неигровые показатели для кластеризации;
· сформирован новый датасет, очищенный от выбросов и некорректно записанной информации;
· проведена кластеризация пользователей с помощью различных алгоритмов: k-means++ и spectral clustering;
· построена таблица приоритетов, которая позволяет определить наиболее оптимальные комбинации между кластерами за столом на основе исторических данных об играх пользователей.
Полученные результаты и наработки могут быть использованы для внедрения системы матчмейкинга в промышленное использование. Целевой метрикой, на основе которой будет оцениваться результат работы: retention. Так как LTV (общий доход, полученный с пользователя) является производной от ретеншена, можно утверждать, что, в случае улучшения показателя возврата игроков, улучшится и LTV.
Список литературы
1 McDonalnd E. The Global Games Market Will Reach $108.9 Billion in 2017 With Mobile Taking 42% // Newzoo, 2017. Режим доступа: https://newzoo.com/insights/articles/the-global-games-market-will-reach-108-9-billion-in-2017-with-mobile-taking-42 (Дата обращения: 07.05.2018)
2 Verto Analytics Going The Distance: Top Mobile Gaming Apps in Terms of Retention // Verto Analytics, 2015. Режим доступа: http://www.vertoanalytics.com/top-mobile-gaming-apps-in-terms-of-retention/ (Дата обращения: 07.05.2018)
3 Bartle R. Hearts, clubs, diamonds, spades: Players who suit muds // Journal of MUD Research, 1996http://mud.co.uk/richard/hcds.htm
4 Kallist Психотипы Бартла и балансировка аудитории // Mail.ru Group, 2015. Режим доступа: https://habrahabr.ru/company/mailru/blog/263839/ (Дата обращения: 07.05.2018)
5 Bartle R. Interactive Multi-User Computer Games // British Telecom Research Laboratories, 1990
6 International hobo. Brain Hex // 2009. Режим доступа: http://blog.brainhex.com/ (Дата обращения: 07.05.2018)
7 Panone D. Poker playing stlyles // Pokerology. Режим доступа: http://www.pokerology.com/lessons/poker-playing-styles/
(Дата обращения: 07.05.2018)
8 Mcrdichian J. The 7 Different Types of Poker Players // Mandatory, 2013. Режим доступа: http://www.mandatory.com/culture/1045000-the-7-different-types-of-poker-players#u9SgfVwclOdKCuYg.99
(Дата обращения: 07.05.2018)
9 Mellon L. Applying metrics driven development to MMO costs and risks // Versant Corporation. Режим доступа: http://maggotranch.com/MMO_Metrics.pdf (Дата обращения: 07.05.2018)
10 Drachen A. et al. Game Analytics - The Basics // Springer-Verlag London, 2013
11 Shiu A., Madhavan A. Mastering Retention: proven methods for turning user behavior insights into retention strategies // Amplitude, 2017
12 Vempaty A. Is Retention Like Teenage Sex? // Amplitude, 2016. Режим доступа: https://amplitude.com/blog/2016/01/21/is-retention-like-teenage-sex/ (Дата обращения: 07.05.2018)
13 Arthur D., Vassilvitskii S. k-means++: The Advantages of Careful Seeding // Stanford University, 2006
14 Arthur D., Vassilvitskii S. How slow is the k-means method? // Stanford University, 2006
15 Sashaeve Кластеризация: алгоритмы k-means и c-means //2009 Режим доступа: https://habrahabr.ru/post/67078/ (Дата обращения: 07.05.2018)
16 Пользователь libfun Открытый курс машинного обучения // Open Data Science, 2017. Режим доступа: https://habrahabr.ru/company/ods/blog/325654/ (Дата обращения: 07.05.2018)
17 Чубукова И. Методы кластерного анализа. Иерархические методы // INTUIT, 2016. Режим доступа: https://www.intuit.ru/studies/courses/6/6/lecture/182?page=4
(Дата обращения: 07.05.2018)
18 Orsini L. Why Python Makes A Great First Programming Language //Readwrite, 2014. Режим доступа: https://readwrite.com/2014/07/08/what-makes-python-easy-to-learn/ (Дата обращения: 25.04.2018)
19 Lloyd, Stuart P. Least squares quantization in PCM//IEEE Transactions on Information Theory, 1982, 28 (2): 129-137
20 Agresti A., Coull B.A. Approximate is better than `exact' for interval estimation of binomial proportions. Am. Stat. 1998;52:119-126. doi:10.2307/2685469
Приложение 1. Время игры между различными кластерами
Состояние стола (стейт) |
Среднее время |
Количество партий |
|
[0.0, 0.0, 0.0, 1.0] |
28 |
1 |
|
[0.0, 3.0, 3.0, 3.0, 3.0] |
9 |
1 |
|
[0.0, 0.0, 2.0, 2.0, 3.0] |
15 |
1 |
|
[0.0, 0.0, 4.0, 4.0] |
41 |
1 |
|
[0.0, 0.0, 3.0, 4.0] |
13 |
1 |
|
[4.0, 4.0, 4.0, 4.0, 4.0] |
18 |
1 |
|
[0.0, 0.0, 2.0, 4.0] |
29.5 |
2 |
|
[0.0, 0.0, 2.0, 3.0] |
79 |
2 |
|
[0.0, 2.0, 4.0, 4.0, 4.0] |
36 |
2 |
|
[0.0, 0.0, 1.0, 3.0, 3.0] |
301 |
2 |
|
[0.0, 0.0, 1.0, 3.0, 4.0] |
43.5 |
2 |
|
[0.0, 0.0, 0.0] |
96 |
2 |
|
[0.0, 3.0, 3.0, 4.0, 4.0] |
24 |
2 |
|
[0.0, 0.0, 1.0, 2.0, 3.0] |
120.33 |
3 |
|
[0.0, 0.0, 3.0, 3.0] |
28 |
3 |
|
[0.0, 3.0, 3.0, 3.0, 4.0] |
42.33 |
3 |
|
[0.0, 3.0, 4.0, 4.0, 4.0] |
26.67 |
3 |
|
[0.0, 0.0, 1.0, 1.0, 2.0] |
127.75 |
4 |
|
[0.0, 1.0, 4.0, 4.0, 4.0] |
41.25 |
4 |
|
[0.0, 0.0, 2.0, 2.0] |
177.25 |
4 |
|
[0.0, 0.0, 1.0, 1.0, 3.0] |
49.75 |
4 |
|
[0.0, 0.0, 1.0, 1.0, 4.0] |
44 |
4 |
|
[0.0, 0.0, 1.0, 1.0, 1.0] |
82.75 |
4 |
|
[0.0, 0.0, 1.0, 2.0, 4.0] |
34.2 |
5 |
|
[0.0, 0.0, 1.0, 2.0, 2.0] |
143.5 |
6 |
|
[0.0, 4.0, 4.0, 4.0] |
23 |
6 |
|
[0.0, 0.0, 4.0] |
53.16 |
6 |
|
[0.0, 1.0, 3.0, 4.0, 4.0] |
38.5 |
6 |
|
[0.0, 2.0, 3.0, 4.0, 4.0] |
35.43 |
7 |
|
[0.0, 2.0, 2.0, 4.0, 4.0] |
43 |
8 |
|
[0.0, 0.0, 1.0, 3.0] |
34.89 |
9 |
|
[0.0, 2.0, 2.0, 2.0, 4.0] |
98.8 |
10 |
|
[0.0, 0.0, 3.0] |
57.7 |
10 |
|
[0.0, 2.0, 3.0, 3.0, 3.0] |
63.16 |
12 |
|
[0.0, 2.0, 2.0, 2.0, 3.0] |
130.30 |
13 |
|
[3.0, 3.0, 3.0, 3.0, 3.0] |
52.07 |
13 |
|
[0.0, 3.0, 3.0, 3.0] |
26 |
13 |
|
[3.0, 4.0, 4.0, 4.0, 4.0] |
32.07 |
13 |
|
[0.0, 0.0, 2.0] |
47.78 |
14 |
|
[0.0, 0.0, 1.0, 4.0] |
67.28 |
14 |
|
[0.0, 1.0, 3.0, 3.0, 4.0] |
40 |
16 |
|
[2.0, 4.0, 4.0, 4.0, 4.0] |
29.06 |
16 |
|
[0.0, 1.0, 3.0, 3.0, 3.0] |
44.66 |
18 |
|
[1.0, 4.0, 4.0, 4.0, 4.0] |
26.21 |
19 |
|
[0.0, 1.0, 1.0, 4.0, 4.0] |
35.37 |
19 |
|
[0.0, 2.0, 2.0, 3.0, 4.0] |
70.31 |
19 |
|
[0.0, 1.0, 2.0, 4.0, 4.0] |
35.42 |
21 |
|
[0.0, 3.0, 3.0, 4.0] |
28.63 |
22 |
|
[0.0, 0.0, 1.0, 2.0] |
106.09 |
22 |
|
[0.0, 2.0, 2.0, 2.0, 2.0] |
139.48 |
23 |
|
[0.0, 2.0, 3.0, 3.0, 4.0] |
48.69 |
23 |
|
[0.0, 1.0, 2.0, 3.0, 3.0] |
71.56 |
23 |
|
[0.0, 0.0] |
39.17 |
24 |
|
[0.0, 3.0, 4.0, 4.0] |
25.16 |
25 |
|
[0.0, 2.0, 4.0, 4.0] |
36.61 |
26 |
|
[0.0, 1.0, 1.0, 3.0, 3.0] |
47.48 |
27 |
|
[0.0, 2.0, 3.0, 3.0] |
64.42 |
28 |
|
[4.0, 4.0, 4.0, 4.0] |
16.17 |
29 |
|
[0.0, 0.0, 1.0, 1.0] |
67.06 |
29 |
|
[0.0, 0.0, 1.0] |
101.77 |
36 |
|
[2.0, 2.0, 4.0, 4.0, 4.0] |
37.91 |
37 |
|
[0.0, 1.0, 4.0, 4.0] |
40.49 |
45 |
|
[0.0, 4.0, 4.0] |
24.54 |
48 |
|
[0.0, 3.0, 3.0] |
44.18 |
50 |
|
[0.0, 1.0, 1.0, 1.0, 3.0] |
50.76 |
51 |
|
[2.0, 3.0, 3.0, 3.0, 3.0] |
62.76 |
52 |
|
[0.0, 1.0, 1.0, 3.0, 4.0] |
45.03 |
54 |
|
[3.0, 3.0, 3.0, 3.0, 4.0] |
40.17 |
58 |
|
[0.0, 1.0, 2.0, 3.0, 4.0] |
68.64 |
59 |
|
[3.0, 3.0, 4.0, 4.0, 4.0] |
29.35 |
60 |
|
[0.0, 1.0, 1.0, 1.0, 4.0] |
68.27 |
62 |
|
[2.0, 3.0, 4.0, 4.0, 4.0] |
28.7 |
62 |
|
[0.0, 2.0, 2.0, 3.0] |
72.15 |
65 |
|
[0.0, 2.0, 3.0, 4.0] |
34.42 |
66 |
|
[2.0, 2.0, 2.0, 4.0, 4.0] |
52.8 |
68 |
|
[0.0, 1.0, 1.0, 1.0, 1.0] |
85.13 |
68 |
|
[0.0, 1.0, 3.0, 3.0] |
50.07 |
69 |
|
[0.0, 1.0, 2.0, 2.0, 4.0] |
78 |
70 |
|
[0.0, 2.0, 2.0, 4.0] |
61.38 |
76 |
|
[2.0, 2.0, 3.0, 3.0, 3.0] |
90.35 |
77 |
|
[0.0, 1.0, 2.0, 2.0, 2.0] |
97.06 |
77 |
|
[2.0, 2.0, 2.0, 3.0, 3.0] |
124.62 |
86 |
|
[3.0, 3.0, 3.0, 4.0, 4.0] |
33.47 |
90 |
|
[1.0, 1.0, 4.0, 4.0, 4.0] |
31.41 |
92 |
|
[1.0, 3.0, 3.0, 3.0, 3.0] |
44.71 |
92 |
|
[3.0, 3.0, 3.0, 3.0] |
31.75 |
93 |
|
[0.0, 3.0, 4.0] |
45.69 |
97 |
|
[0.0, 1.0, 2.0, 2.0, 3.0] |
90.28 |
98 |
|
[1.0, 2.0, 4.0, 4.0, 4.0] |
35.85 |
102 |
|
[0.0, 1.0, 3.0, 4.0] |
42.23 |
105 |
|
[0.0, 1.0, 1.0, 2.0, 4.0] |
69.56 |
106 |
|
[1.0, 3.0, 4.0, 4.0, 4.0] |
30.49 |
111 |
|
[0.0, 1.0, 1.0, 2.0, 3.0] |
84.15 |
113 |
|
[0.0, 2.0, 2.0, 2.0] |
87.89 |
114 |
|
[2.0, 2.0, 2.0, 2.0, 4.0] |
106.50 |
134 |
|
[2.0, 2.0, 3.0, 4.0, 4.0] |
47.32 |
140 |
|
[2.0, 3.0, 3.0, 3.0, 4.0] |
44.14 |
142 |
|
[3.0, 4.0, 4.0, 4.0] |
21.04 |
151 |
|
[2.0, 2.0, 3.0, 3.0, 4.0] |
62.24 |
164 |
|
[2.0, 4.0, 4.0, 4.0] |
27.96 |
165 |
|
[2.0, 2.0, 2.0, 2.0, 3.0] |
129.47 |
169 |
|
[0.0, 1.0, 1.0, 1.0, 2.0] |
88.7 |
179 |
|
[2.0, 2.0, 2.0, 2.0, 2.0] |
164.23 |
181 |
|
[2.0, 3.0, 3.0, 4.0, 4.0] |
39.67 |
182 |
|
[0.0, 2.0, 3.0] |
57.88 |
186 |
|
[0.0, 1.0, 1.0, 2.0, 2.0] |
91.52 |
194 |
|
[2.0, 2.0, 2.0, 3.0, 4.0] |
88.8 |
195 |
|
[0.0, 2.0, 4.0] |
52.62 |
199 |
|
[1.0, 1.0, 3.0, 3.0, 3.0] |
56.15 |
199 |
|
[0.0, 3.0] |
40.67 |
223 |
|
[0.0, 1.0, 1.0, 3.0] |
60.76 |
234 |
|
[0.0, 1.0, 1.0, 4.0] |
46.39 |
238 |
|
[1.0, 4.0, 4.0, 4.0] |
27.96 |
241 |
|
[1.0, 1.0, 1.0, 4.0, 4.0] |
47.19 |
244 |
|
[1.0, 2.0, 3.0, 3.0, 3.0] |
54.80 |
252 |
|
[1.0, 3.0, 3.0, 3.0, 4.0] |
42.57 |
269 |
|
[2.0, 3.0, 3.0, 3.0] |
37.70 |
275 |
|
[0.0, 1.0, 2.0, 3.0] |
67.70 |
289 |
|
[1.0, 3.0, 3.0, 4.0, 4.0] |
34.46 |
294 |
|
[0.0, 1.0, 2.0, 4.0] |
49.38 |
295 |
|
[0.0, 4.0] |
31.58 |
296 |
|
[3.0, 3.0, 3.0, 4.0] |
27.62 |
301 |
|
[4.0, 4.0, 4.0] |
19.52 |
306 |
|
[1.0, 2.0, 2.0, 4.0, 4.0] |
48.80 |
313 |
|
[0.0, 2.0, 2.0] |
72.24 |
322 |
|
[3.0, 3.0, 4.0, 4.0] |
24.79 |
332 |
|
[1.0, 1.0, 1.0, 3.0, 3.0] |
64.93 |
338 |
|
[3.0, 3.0, 3.0] |
31.79 |
350 |
|
[1.0, 1.0, 3.0, 4.0, 4.0] |
41.78 |
354 |
|
[0.0, 1.0, 3.0] |
58.95 |
407 |
|
[2.0, 2.0, 4.0, 4.0] |
41.11 |
412 |
|
[0.0, 1.0, 1.0, 1.0] |
77.61 |
423 |
|
[2.0, 2.0, 3.0, 3.0] |
56.90 |
426 |
|
[1.0, 1.0, 1.0, 1.0, 1.0] |
78.27 |
434 |
|
[0.0, 1.0, 4.0] |
45.08 |
463 |
|
[1.0, 1.0, 3.0, 3.0, 4.0] |
46.57 |
465 |
|
[0.0, 1.0, 2.0, 2.0] |
81.84 |
478 |
|
[1.0, 3.0, 3.0, 3.0] |
39.81 |
479 |
|
[1.0, 1.0, 1.0, 1.0, 4.0] |
55.81 |
485 |
|
[1.0, 2.0, 2.0, 3.0, 3.0] |
85.06 |
510 |
|
[1.0, 2.0, 3.0, 4.0, 4.0] |
41.83 |
512 |
|
[2.0, 3.0, 4.0, 4.0] |
33.45 |
516 |
|
[1.0, 1.0, 2.0, 4.0, 4.0] |
48.07 |
518 |
|
[1.0, 1.0, 1.0, 1.0, 3.0] |
64.86 |
547 |
|
[1.0, 1.0, 1.0, 3.0, 4.0] |
55.01 |
593 |
|
[1.0, 2.0, 3.0, 3.0, 4.0] |
52.97 |
670 |
|
[0.0, 2.0] |
39.91 |
677 |
|
[2.0, 3.0, 3.0, 4.0] |
36.67 |
696 |
|
[1.0, 2.0, 2.0, 2.0, 4.0] |
91.07 |
735 |
|
[1.0, 1.0, 2.0, 3.0, 3.0] |
71.60 |
786 |
|
[0.0, 1.0, 1.0, 2.0] |
74.54 |
793 |
|
[2.0, 2.0, 2.0, 4.0] |
69.06 |
799 |
|
[2.0, 2.0, 2.0, 3.0] |
82.07 |
831 |
|
[1.0, 2.0, 2.0, 3.0, 4.0] |
64.19 |
864 |
|
[2.0, 2.0, 3.0, 4.0] |
50.54 |
891 |
|
[1.0, 2.0, 2.0, 2.0, 3.0] |
116.65 |
917 |
|
[1.0, 3.0, 4.0, 4.0] |
29.50 |
983 |
|
[3.0, 4.0, 4.0] |
22.87 |
1009 |
|
[2.0, 2.0, 2.0, 2.0] |
92.56 |
1036 |
|
[1.0, 2.0, 2.0, 2.0, 2.0] |
154.46 |
106... |
Подобные документы
Изучение ведущих технологий шифрования и обмена данными. Выбор и разработка архитектуры сетевой технологии управления ключами пользователей. Разработка логической модели базы данных, основных форм и интерфейсов, основных алгоритмов обработки информации.
курсовая работа [586,6 K], добавлен 18.12.2011Функции пользователей в локальной вычислительной сети, анализ и выбор организации ресурсов. Выбор сетевой операционной системы. Сервисное программное обеспечение. Выбор протокола, сетевой технологии и кабеля. Резервирование и архивирование данных.
дипломная работа [2,0 M], добавлен 22.02.2013Необходимость ввода гибкой классификации пользователей на основе их поведения при работе с тематическими ресурсами. Параметризация классов пользователей, интеллектуальный алгоритм фильтрации контента. Параметры для принятия экспертной системой решения.
статья [16,7 K], добавлен 15.11.2013Логическая организация информационной системы специального назначения, её состав и задачи. Назначение комплекса программ "Эксплуатационное обслуживание" и его компонентов. Архитектура подсистемы автоматического резервирования данных пользователей.
дипломная работа [1,5 M], добавлен 13.04.2014Разработка средствами языка PHP и Фреймворка Yii системы регистрации и аутентификации пользователей на сайте. Проектирование приложения с помощью языка UML, построение диаграммы прецедентов. База данных приложения. Страница регистрации пользователей.
отчет по практике [1,1 M], добавлен 15.09.2014Разработка базы данных "Студенты", которая позволяет производить операции с данными: регистрацию студентов в базе данных, а также удаление, изменение, резервное копирование информации о студентах. Алгоритм работы программы и вспомогательных процедур.
курсовая работа [27,5 K], добавлен 06.02.2013Создание автоматизированной системы обработки заявок пользователей. Анализ требований к информационному, техническому и программному обеспечению. Проектирование интерфейса системы. Выбор средств реализации. Модель базы данных системы обработки заявок.
курсовая работа [1,6 M], добавлен 22.12.2014Способы ограждения пользователей от деталей фактического устройства данных. Список описателей переменных, указателей или массивов. Статические или динамические структуры данных. Доступ к различным элементам данных. Добавление и удаление элементов.
презентация [57,8 K], добавлен 14.10.2013Анализ системы управления базами данных, основные задачи: обработка информации, организация работы пользователей. Access как функционально полная система, имеющая мощные средства для работы программы. Этапы разработки базы данных торговой организации.
контрольная работа [458,0 K], добавлен 05.01.2013Создание баз данных и таблиц. Ограничение доступа для пользователей. Хранимая процедура, доступная всем пользователям. Скрипты для проверки ограничений. Методы обеспечения безопасности сервера базы данных. Чтение, изменение и добавление данных.
лабораторная работа [1,4 M], добавлен 23.07.2012Анализ потока данных с учетом их прогнозирования, составления статических отчетов в системах учета. Ограничения на информацию в базе данных. Логическое проектирование баз данных. Описание основных функций групп пользователей и управления данными.
курсовая работа [1,6 M], добавлен 09.03.2022Идентификация пользователей. Проверка полномочий и их представлений. Защита базы данных. Контроль параллельной обработки. Обслуживание и восстановление базы данных. Источники отказов и сбоев. Резервное копирование данных. Процедуры восстановления.
презентация [135,6 K], добавлен 19.08.2013Понятие безопасности данных. Базовые технологии сетевой аутентификации информации на основе многоразового и одноразового паролей: авторизация доступа, аудит. Сертифицирующие центры, инфраструктура с открытыми ключами, цифровая подпись, программные коды.
курсовая работа [861,3 K], добавлен 23.12.2014Организация офисной сети, настройка шлюза для обеспечения выхода пользователей в "Интернет". Организация DNS+DHCP, файлового сервера FTP/SMB для хранения конфиденциальных и общедоступных данных, защита и информационное обеспечение пользователей.
курсовая работа [5,6 M], добавлен 18.08.2009Особенности технологий создания и работы с базами данных. Реализация структуры базы данных в MS Visio и MS SQL Server. Виды манипуляций над данными, создание сложных запросов. Суть и характеристика прав пользователей, разработка клиентских приложений.
учебное пособие [2,2 M], добавлен 16.05.2013Разработка игры, реализующей алгоритмы искусственного интеллекта, позволяющие играть в одиночку. Анализ обрабатываемой информации и структур данных для ее хранения. Разработка интерфейса пользователя, форм вывода данных. Выбор стратегии тестирования.
курсовая работа [896,5 K], добавлен 19.06.2013Ключевые потребности пользователей. Работа с учетными записями пользователей. Регистрация заказа. Обработка электронных платежей. Выявление технически подготовленных автомобилей. Разработка диаграмм вариантов использования. Проектирование базы данных.
курсовая работа [664,0 K], добавлен 31.10.2014Содержание исходного набора данных. Основные причины возникновения выбросов. Главные алгоритмы кластеризации. Обработка и очистка файла. Описание его полей. Прямоугольная вещественнозначная матрица. Метрика Минковского. Математическое определение объекта.
курсовая работа [1,4 M], добавлен 25.10.2016Понятие, задачи и требования к разработке базы данных. Типы моделей данных, их преимущества и недостатки и обоснование выбора модели. Процесс учета студентов в больнице, описание структуры базы данных, перечень групп пользователей и доступа к данным.
курсовая работа [45,1 K], добавлен 09.03.2009Проверка подлинности пользователя путём сравнения введённого им пароля с паролем в базе данных пользователей. Контроль и периодический пересмотр прав доступа пользователей к информационным ресурсам. Построение трехмерной модели человеческого лица.
презентация [1,1 M], добавлен 25.05.2016