УДК 330.4
М. В. Сучилина, С. В. Рындина
БИЗНЕС-АНАЛИТИКА С ИСПОЛЬЗОВАНИЕМ ЯЗЫКА PYTHON НА ПРИМЕРЕ СТРАХОВАНИЯ ПУТЕШЕСТВИЙ
Аннотация. На примере страхования путешествий рассматриваются методы прогнозной бизнес-аналитики с целью извлечения полезных бизнесу знаний для принятия решений в страховой компании. Отмечается, что прогнозная и предписательная бизнес-аналитика обладают большим потенциалом для оптимизации и автоматизации операционной деятельности компании. Однако их использование во многих компаниях ограничено, несмотря на существующие бесплатные инструменты и платформенные решения.
Ключевые слова: бизнес-аналитика, прогнозная аналитика, страхование, метод ближайших соседей, логистическая регрессия.
В настоящее время предпринимательство является основой любой развитой экономики, но многие организации сталкиваются с рядом проблем, оказывающих серьезное негативное влияние на их деятельность. К числу таких организаций относятся и страховые компании, ориентирующиеся на страхование путешествий. Для страховых компаний необходим анализ собираемых данных о продажах туров и страховых полисов, что может помочь с решением задач повышения эффективности. В качестве программного продукта, позволяющего производить подобный анализ, можно назвать платформу Anaconda [1], являющуюся наиболее широко используемым дистрибутивом языка Python. Anaconda включает согласованный набор библиотек на языке Python, применяемых для исследования данных и машинного обучения.
Бизнес-аналитика используется во многих компаниях в основном для решения задач отчетности: мониторинга и контроля показателей деятельности. Зачастую отчетность при устоявшейся практике управленческих решений оказывается излишне подробной: в реальности решения принимаются на основе контроля динамики очень ограниченного числа собираемых данных. Иными словами, расходы на сбор и хранение данных осуществляются независимо от реальной отдачи от этих данных и приносимой ими пользы. Расходы, связанные с данными, постоянно растут, что обусловлено повышением требований к конфиденциальности, безопасности хранения, в том числе и закрепленных на законодательном уровне. Отказаться от сбора данных невозможно, обслуживать процессы, связанные с данными, - дорого. Поэтому компании вынуждены искать пути получения финансовой отдачи от собираемых данных не только для получения конкурентных преимуществ, но и для покрытия издержек на информационные процессы.
Существует ряд методов, использование которых для анализа реальных данных о клиентах и приобретаемых ими продуктах страховой компании дает возможность выявить зависимости и вероятности, связанные с показателями эффективности компании и уровнем ее продаж. Прогнозная и предписывающая аналитика данных позволяет организации на основе выявленных зависимостей корректировать свою операционную деятельность для формирования конкурентных предложений на рынке услуг.
К прогнозной бизнес-аналитике относятся метод поиска ближайших соседей, позволяющий предсказать, например, оптимальное значение комиссии страхового агент-
© Сучилина М. В., Рындина С. В., 2020.
ства, и логит-модель, дающая возможность предсказывать значения вероятности наступления какого-либо события, например поступления претензии, в зависимости от характеристик продукта страхования.
Для страховых компаний важно мнение клиентов о работе организации, поэтому предсказание вероятности поступления претензий является актуальной практикой.
В свою очередь, анализ показателей прибыли, таких как сумма продаж полисов страхования путешествий или размер комиссии, получаемой агентством, позволяет вывести закономерности для транзакций и управлять доходом организации.
На сайте Kaggle [2] - платформе, созданной для поддержки исследования данных на основе машинного обучения, доступен набор открытых данных Travel Insurance [3], содержащий в себе 63 327 наблюдений о продажах страховых полисов туристической компании из Сингапура.
Набор данных Travel Insurance включает в себя следующие показатели:
- Agency - информация о наименовании агентства страхования;
- Agency Type - тип агентства по страхованию путешествий;
- Distribution Channel - канал распространения страховок для путешествий, принимающий значения online/offline;
- Product Name - наименование продуктов страхования путешествий;
- Claim - наличие или отсутствие претензий клиентов;
- Duration - продолжительность поездки в днях;
- Destination - пункт назначения путешествия;
- Net Sales - количественные данные о сумме продаж полисов страхования путешествий;
- Commission - комиссия, полученная агентством по страхованию путешествий;
- Age - возраст застрахованного клиента.
Для набора данных страхования клиентов туристической компании используем метод ближайших соседей с целью выявления ценных для принятия бизнес-решений знаний.
Для языка Python существует несколько библиотек с классами и методами, поддерживающими анализ данных. Одна из наиболее полезных в разведочном анализе данных библиотек - pandas [4].
В Jupyter Notebook (входит в состав Anaconda) выполним следующий код для чтения данных из файла travel.csv, размещенного в директории, содержащей установленный дистрибутив Anaconda, в переменную travel_df, параметр sep определяет разделитель, который используется для данных в текстовом файле (результат на рис. 1):
# Подключаем библиотеку import pandas as pd
# Считываем данные из csv-файла travel_df=pd.read_csv('travel.csv\ sep= ',')
# Выводим первые 6 записей созданного набора travel_df.headO
Out[l]:
Agency Agency Type Distribution Channel
Product Name Claim Duration Destination Net Sales Commlsion (in value) Age
CBH Travel Agency
CBH Travel Agency
CWT Travel Agency
CWT Travel Agency
CWT Travel Agency
Offline Comprehensive Plan No 186.0 MALAYSIA -29.0
Offline Comprehensive Plan No 186.0 MALAYSIA -29.0
Online Rental Vehicle Excess Insurance No 65.0 AUSTRALIA -49.5
Online Rental Vehicle Excess Insurance No 60.0 AUSTRALIA -39.6
Online Rental Vehicle Excess Insurance No 79.0 ITALY -19.8
9.57 31.0
9.57 71.0
29.70 32.0
23.76 32.0
11.88 41.0
Рис. i. Результат выполнения кода
ll4
Проведем разведочный анализ данных, используя визуальное представление распределения данных каждого показателя с помощью функции pyplot() из библиотеки matplotlib [5].
Для показателя Age в данных обнаружилась аномальная совокупность наблюдений с возрастом 120 лет (рис. 2), визуализация выполнена с помощью кода:
# Подключаем функцию pyplot() из библиотеки matplotlib from matplotlib import pyplot
# Создаем гистограмму для показателя Age из фрейма travel_df pyplot.hist(travel_df.Age)
# Выводим построенный график на экран pyplot.show()
Удалим из исходного набора наблюдения с возрастом более 90 лет и создадим новые фреймы данных: X - для предикторов (показателей, которые влияют на отклик), у -для отклика (результирующего, зависимого показателя). В качестве отклика у рассмотрим количественный показатель величины комиссии, остальные показатели будут выступать в роли предикторов.
# Исключаем из рассмотрения наблюдения с возрастом больше 90 лет travel_df = travel_df[travel_df.Age<90]
#Переменная X - набор данных без столбца размер комиссии X=travel_df.drop(['Commision (in value)'], axis=1)
# Переменная у - столбец с размером комиссии, y=travel_df['Commision (in value)']
Для дальнейшей работы с данными преобразуем категориальные показатели в фиктивные переменные с помощью метода get_dummies. Категориальные показатели описывают качественные параметры объектов (тип агентства, канал продаж и т.п.). Преобразование get_dummies позволяет перейти от текстового описания уровней показате-
лей к меткам 0/1, определяющим то, что это значение уровня отсутствует у объекта или имеется в наличии.
# Преобразуем категориальные переменные в X в числовые метки X=pd.get_dummies(X, drop_first=True)
Метод ближайших соседей - это ленивый классификатор, фактически его работа начинается в момент поступления новых немаркированных данных. Поэтому выполним разбиение исходных данных на тренировочную и тестовую части с долей тестовых данных 30 %. Для этого используем методы библиотеки БайЫеагп [6].
# Подключаем методы из библиотеки scikit-learn
from sklearn.model_selection import train_test_split, StratifiedKFold from sklearn.neighbors import KNeighborsRegressor #Записываем в переменные результаты разбиения данных X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
# Создаем объект класса KNeighborsRegressor для 10 соседей knn = KNeighborsRegressor(n_neighbors=10)
# Передаем в созданный объект обучающую выборку knn.fit(X_train,y_train)
# Передаем данные тестовой выборки в классификатор knn_pred = knn.predict(X_test)
В переменной knn_pred содержится результат выполнения предсказаний размера комиссии страхового агентства для тестовых наблюдений по методу ближайших соседей, число ближайших соседей было определено равным 10.
Выполнение такого предсказания в режиме реального времени помогало бы формировать конкурентоспособное предложение с учетом тарифной политики страхового агентства, при доступности для анализа представленных данных.
На тех же данных рассмотрим построение логит-модели для определения вероятности претензии. Эта модель позволяет, например, выявить профиль клиента, который с большей вероятностью предъявит претензию.
В модели логистической регрессии отклик - это Claim (наличие претензии). Остальные переменные набора рассматриваются как предикторы. Целевая переменная может иметь только два возможных значения 0 или 1, которые представляют факт отсутствия или наличия претензии соответственно.
На уже очищенных данных travel_df сформируем новый набор предикторов X (без столбца Claim) и новую переменную y (столбец Claim), а также выполним преобразование текстовых меток уровней категориальных показателей в числовые метки фиктивных переменных.
# Переменная X - набор данных без столбца наличия претензии X=travel_df.drop(['Claim'], axis=1)
# Переменная у - столбец со статусом претензии y=travel_df['Commision (in value)']
# Преобразуем категориальные показатели в наборе X X=pd.get_dummies(X, drop_first=True)
В Python построение модели логистической регрессии происходит в классе LogisticRegression, который импортируется из класса sklearn.lmear_model (библиотека scikit-learn [6]).
# Подключаем методы из библиотеки scikit-learn from sklearn.linear_model import LogisticRegression
# Создаем объект класса LogisticRegression logr = LogisticRegression()
# Выполняем обучение модели logr.fit(X, y)
# Определяем точность модели logr.score(X,y)
Выполнение предсказания значения отклика для каждого наблюдения производится с помощью метода .predict().
Логит-модель позволяет определить профиль клиента с наибольшей вероятностью предъявления претензии, что дает возможность оценить риск и выгодность страхования таких клиентов для страхового агентства. Также анализ данных для различных страховых компаний помогает выявить, кто из них чаще продает страховые продукты с последующим предъявлением претензий. Все это делает возможным для страховой компании более взвешенно подойти к сотрудничеству с туристическим оператором и к определению страховых тарифов.
Библиографический список
1. Официальный сайт Anaconda. - URL: https://www.anaconda.com
2. Официальный сайт Kaggle. - URL: https://www.kaggle.com
3. Набор данных Travel Insurance. - URL: https://www.kaggle.com/mhdzahier/travel-insurance
4. Описание библиотеки pandas. - URL: https://pandas.pydata.org
5. Описание библиотеки matplotlib. - URL: https://matplotlib.org
6. Описание библиотеки scikit-learn. - URL: https://scikit-learn.org/stable/index.html
Сучилина Мария Владимировна, бакалавр, Пензенский государственный университет. E-mail: m-suchilina@mail.ru
Рындина Светлана Валентиновна, кандидат физико-математических наук, доцент, кафедра цифровой экономики, Пензенский государственный университет. E-mail: SvetlanaR2004@yandex.ru
Образец цитирования:
Сучилина, М. В. Бизнес-аналитика с использованием языка PYTHON на примере страхования путешествий / М. В. Сучилина, С. В. Рындина // Вестник Пензенского государственного университета. - 2020. - № 3 (31). -С. 113-117.