Фон

Поскольку я пытаюсь подать заявку на работу специалиста по данным, я недавно присоединился к программе Udacity «Стать специалистом по данным в области нанотехнологий».

Для первого проекта мне нужно проанализировать набор данных и поделиться своим анализом на Medium.

Начиная

Я решил использовать этот шанс, чтобы поделиться тем, что я узнал из этой удивительной книги. (Настоятельно рекомендуется!)



Как компании, выпускающие кредитные карты, могут обнаруживать мошеннические операции?

Обзор данных



«Реальный набор данных содержит транзакции по кредитным картам европейских держателей карт в сентябре 2013 года. В этом наборе данных 492 случая мошенничества из 284 807 транзакций. Набор данных сильно несбалансирован, на положительный класс (мошенничество) приходится 0,172% всех транзакций.

  • «Время» содержит секунды, прошедшие между каждой транзакцией.
  • Характеристики V1, V2, … V28 являются основными компонентами, полученными с помощью PCA.
  • «Сумма» — это сумма транзакции, эту функцию можно использовать, например, для зависимого от затрат обучения.
  • «Класс» — это переменная ответа, которая принимает значение 1 в случае мошенничества и 0 в противном случае.
data.head()

data.shape

Генерировать сводную статистику

# describes the data, column by column.
data.describe()

data.columns

# The total number of positive labels, or fraudulent transactions
data[‘Class’].sum()

Определение нечисловых значений по признаку

nanCounter = np.isnan(data).sum()

Определение различных значений по функциям

У нас есть 124 592 различных временных метки. Однако всего насчитывается 284 807 наблюдений. Это означает, что существует несколько транзакций в некоторые временные метки.

Сгенерируйте матрицу признаков и массив меток

# Create the feature matrix X and the labels array Y
dataX = data.copy().drop([‘Class’],axis=1)

dataY = data[‘Class’].copy()

Стандартизируйте матрицу признаков X

# Rescale the feature matrix so that each feature, except for time, has a mean of zero and standard deviation of one
featuresToScale = dataX.drop([‘Time’],axis=1).columns
sX = pp.StandardScaler(copy=True)
dataX.loc[:,featuresToScale] = sX.fit_transform(dataX[featuresToScale])
dataX.describe()

Разработка функций и выбор функций

  • «Выбор признаков не требуется, поскольку количество наблюдений (284 807) значительно превышает количество признаков (30), что значительно снижает вероятность переобучения».

Проверить корреляцию признаков

correlationMatrix = pd.DataFrame(data=[],index=dataX.columns,
columns=dataX.columns)
for i in dataX.columns:
for j in dataX.columns:
correlationMatrix.loc[i,j] = np.round(pearsonr(dataX.loc[:,i], dataX.loc[:,j])[0],2)

Визуализация данных

count_classes = pd.value_counts(data[‘Class’],sort=True).sort_index()
ax = sns.barplot( x = count_classes.index, y = count_classes/len(data))
ax.set_title(‘Frequency Percentage by Class’)
ax.set_xlabel(‘Class’)
ax.set_ylabel(‘Frequency Percentage’)

График просто показывает, насколько несбалансирован набор данных.

Продолжение следует!

В следующей статье я расскажу о подготовке моделей и построении моделей машинного обучения! Следите за обновлениями!