Однажды я организовывал в Пскове опрос пешеходов, целью которого было выявить, какой из ряда планируемых тарифов сотового оператора больше нравится респондентам. После пары дней работы мои интервьюеры взвыли: с их точки зрения никакой существенной разницы между вариантами не было, хотя респонденты уверенно совершали свой выбор.
Управленческая проблема
Я задался вопросом, схожим с тем, который мучил интервьюеров, когда решил сменить мой текущий тарифный план «Дело чести» от «Теле2» на что-нибудь свеженькое. Принимать решение «на основе интуиции» не хочется, когда под боком есть статистические данные, и можно принять data-driven decision («решение на основе данных»). Подобная задача может стать перед организацией, которая хочет оптимизировать расходы на связь подбором более выгодных тарифов.
Я решил создать пробный алгоритм на языке R для выбора наиболее выгодного тарифа на основе имеющейся истории использования услуг сотовой связи и рассмотреть перспективы создания сервиса, предлагающего людям и компаниям услугу оптимизации расходов на связь.
Программа исследования
Проблема и цель исследования
- Минимум
- Проблема заключается в том, что клиенту неизвестно, какой из предлагаемых тарифов позволит понести наименьшие затраты. Цель — определить такой тариф. Поскольку проект пилотный, а, к тому же, я не собираюсь менять своего оператора, то остановимся на тарифах только от Теле2.
- Максимум
- Непонятно, какие технические трудности могут появиться при реализации идеи по подбору тарифа в виде вэб-сервиса. Цель — в процессе работы над пилотным проектом рассмотреть возможности его переноса на бизнес-рельсы.
Объект, предмет и выборочная совокупность
Объектом исследования становится использование мной услуг сотовой связи. Предмет — различия в среднемесячной стоимости услуг при их расчёте по разным тарифам Теле2.
В качестве выборки мы возьмём мою историю звонков/сообщений и трафика за апрель 2014 года.
Схема моделирования и анализа
Схема работы проста: алгоритм знает, сколько стоит каждый вид операции по данному тарифу. К имеющемуся массиву операций поочередно применяются все тарифы, подсчитывается сумма расходов по каждому и выбирается самый выгодный тарифный план. В этом случае мы узнаем, каким тарифом мне было бы выгоднее пользоваться в течение апреля 2014 года.
Чтобы определить выгодный тариф для моего «усреднённого» месяца, нам потребуется перенести выводы эксперимента с выборочной выборки (апрель 2014) на генеральную совокупность. Для этого мы воспользуемся методом Bootstrapping.
Вся обработка данных, расчёты и визуализация произведены на языке программирования R. Исходный код скриптов опубликован в репозитории на github.
Результаты пилотного исследования
Перспективы создания веб-сервиса или предложения услуги по выбору тарифа
Приложение: описание резализации пилотного проекта
Подготовка данных
Подготовка данных обычно занимает самую большую часть времени. Наш проект — не исключение.
Преобразование PDF в Excel
Истончиком данных послужила детализация расходов (стоимость — 15 рублей). Рассматривался вариант использования истории напрямую из телефона, но у детализации от оператора есть преимущества: в документе указываются сведения о стоимости каждой операции, и это позволяет проверить, правильно ли работает наш алгоритм, а также гораздо проще разобраться, находился ли телефон в роуминге, на какой телефон совершён вызов (на псковский Теле2 или на Теле2 в соседнем регионе и пр.). Плюс к этому, из истории телефона не вытащишь посессионные объёмы трафика (по крайней мере, из моего).
В личном кабинете Теле2 не предлагается выбрать формат, в котором клиент получает детализацию расходов. Все отчёты только в формате PDF. Я смог бесплатно преобразовать полученный файл в формат электронной таблицы с помощью онлайн-сервиса. К сожалению, я забыл его название, и в следующий раз придётся искать заново. После конвертации пришлось кое-где добавить ячеек, т.к. где-то дата и время попали в одну ячейку, а где-то в разные. Для однократной операции и небольшой истории затраты времени не слишком ощутимы, но в корпоративных случаях придётся договариваться с сотовыми провайдерами о чём-то более дружественном.
Первые строки массива после импорта в R приведены ниже. Все телефонные номера заменены на случайные.
> head(data) |
date plan type number seconds sum pay 1 2014-04-01 08:42:48 Дело чести Internet-трафик Трафик: 13915 байт NA 0.63 0.10 2 2014-04-01 08:43:54 Дело чести Internet-трафик Трафик: 53514 байт NA 0.63 0.10 3 2014-04-01 09:00:05 БВ Входящее SMS +12468335597 0 0.00 0.00 4 2014-04-01 09:26:15 Дело чести Исходящий на Мегафон +79211162647 14 0.35 0.35 5 2014-04-01 10:29:36 БВ Входящее SMS 7031 0 0.00 0.00
Перенос выводов о выгодности от конкетного месяца на «усреднённый» месяц
Суть метода «бутстреп» заключается в том, что из всей моей апрельской истории (в ней 520 телефонных событий) случайным (вероятностным) образом составляется множество (несколько тысяч) выборок объёмом 520 элементов. Каждый элемент может попасть в выборку несколько раз или не попасть вообще. Т.е. мы получаем массив из нескольких тысяч выборок, которые почти одинаковы, но немного (а иногда сильно) отличаются друг от друга. Другими словами, мы создали несколько тысяч альтернатив моему «телефонному» апрелю 2014 года. Поскольку апрель, по моим ощущениям, в плоскости использования телефона не имел радикальных отличий от других месяцев (в апреле, как и в другие месяцы, я не звонил на спутниковые телефоны, не болтал часами в международном роуминге, не отправлял SMS в какие-нибудь голосования), я могу с достаточной доли уверенности сказать, что многие из имеющихся сгенерированных выборок могли также быть получены и из других месяцев. Посчитав по каждой из нескольких тысяч выборок стоимость услуг для каждого из тарифов, мы можем определить среднюю цену моего месяца по тарифу и доверительные интервалы. Это даст нам возможность сравнить тарифы, понять, есть ли между ними значимые отличия и выбрать самый выгодный.
Если описание алгоритма Bootstrap показалось вам достаточно сложным, не переживайте: он реализован в R, и нам останется лишь передать данные и параметры подсчёта программе, а затем получить результаты.