Недавно я начал проект по разработке модели обнаружения мошенничества на основе набора данных Kaggle, доступного по адресу: https://www.kaggle.com/c/fraud-detection-analysis. Когда я начал импортировать данные, Я понял, что время на выполнение простого read_csv
было слишком большим. Это привело меня к поиску более практичных способов работы с большими данными. Двумя основными вопросами были: как сократить время обработки при использовании Pandas? Как сохранить представление явления, присутствующее в необработанных данных, чтобы его можно было использовать как для моделирования, так и для исследовательского анализа данных?
Как показано ниже, существует двухэтапное решение, которое может обеспечить жизнеспособный предварительный анализ полного набора данных, а также создать разделенную версию для использования в цикле CRISP-DM.
- PySpark
Настройка сеанса PySpark так же проста, как показано ниже:
Затем все, что осталось сделать, это определить схему набора данных (имеется в виду характеристики каждого столбца или объекта в наборе данных):
И теперь мы можем использовать Spark для визуализации данных с помощью таких классов, как «describe().show()», и получить общее представление о качестве данных.
- SkLearn.model_selection.StratifiedShuffleSplit
Как указано на веб-сайте SKLearn:
«Этот объект перекрестной проверки представляет собой слияние StratifiedKFold и ShuffleSplit, которое возвращает стратифицированные рандомизированные складки. Складки сделаны с сохранением процентного соотношения образцов для каждого класса».
В случае классификации, такой как обнаружение мошенничества, эта функция позволит поддерживать сбалансированную пропорцию между категориальными признаками, включая, конечно же, целевой признак «мошенничество». Из набора данных чуть более 6 миллионов строк мы можем создать набор поездов только с 10% от его общего значения и то же самое для тестового набора с остальными данными.
sample = StratifiedShuffleSplit(n_splits=1, test_size=0.1, random_state=42) for trainread_csv
index, train_2_index in sample.split(df_raw, df_raw['isFraud']): df_raw_1 = df_raw.iloc[trainread_csv
index] df_raw_2 = df_raw.iloc[train_2_index]
В результате получается набор данных, который легче повторять на каждом этапе цикла CRISP и, следовательно, значительно повышает производительность.
Узнайте больше об этом проекте по адресу: https://github.com/LucasBMedeiros/fraud_blocker.