Введение

Распространенное разочарование в отрасли, особенно при получении информации о бизнесе из табличных данных, заключается в том, что на самые волнующие вопросы (с их точки зрения) часто нельзя ответить с помощью одних только данных наблюдений. Эти вопросы могут быть похожи на:

  • «Что произойдет, если я уменьшу вдвое цену на свой продукт?»
  • «Какие клиенты оплатят свои долги, только если я им позвоню?»

Джуда Перл и его исследовательская группа за последние десятилетия разработали прочную теоретическую основу для решения этой проблемы. Тем не менее, первые шаги к объединению его с основным машинным обучением только начинаются.

Причинный граф является центральным объектом в упомянутой выше структуре, но он часто неизвестен, зависит от личных знаний и предубеждений или слабо связан с доступными данными. Основная цель задания – конкретно подчеркнуть важность вопроса. В связи с этим ожидается, что стажеры попытаются выполнить следующие задачи:

  1. Выполните задачу причинно-следственного вывода, используя структуру Перла.
  2. Выведите причинно-следственный график из данных наблюдений, а затем подтвердите график.
  3. Объедините машинное обучение с причинно-следственными выводами.

Первый вопрос прост, второй и третий все еще остаются открытыми в научном сообществе, поэтому от стажеров может потребоваться немного больше исследований, инноваций и нестандартного мышления.

Недавняя статья довольно хорошо обобщает состояние дел в этой области: https://dl.acm.org/doi/pdf/10.1145/3397269. Чтение очень рекомендуется для тех, кто заинтересован в более глубоком погружении.

Функции данных



Данные извлекаются из Kaggle/UCI Machine Learning Repository. В последнем вы можете найти еще больше данных, которые вы можете изучить дальше. Чтобы больше узнать о данных и о том, как они собираются, я настоятельно рекомендую прочитать эту статью: (PDF) Диагностика рака молочной железы и прогноз с помощью линейного программирования (researchgate.net).

Особенности в данных вычислены из оцифрованного изображения аспирата тонкой иглой (FNA) массы молочной железы.

Информация об атрибутах:

  1. идентификационный номер
  2. Диагноз (M = злокачественный, B = доброкачественный)
  3. Остальные (3–32)

Для каждого клеточного ядра вычисляются десять вещественных признаков:

  1. радиус (среднее расстояние от центра до точек на периметре)
  2. текстура (стандартное отклонение значений шкалы серого)
  3. Периметр
  4. Область
  5. гладкость (локальное изменение длины радиуса)
  6. компактность (периметр²/площадь — 1,0)
  7. вогнутость (выраженность вогнутых участков контура)
  8. вогнутые точки (количество вогнутых частей контура)
  9. Симметрия
  10. фрактальная размерность («приближение береговой линии» — 1)

Среднее значение, стандартная ошибка и «наихудшее» или наибольшее (среднее значение трех самых больших значений) этих признаков были вычислены для каждого изображения, в результате чего было получено 30 признаков. Например, поле 3 — это средний радиус, поле 13 — юго-восточный радиус, а поле 23 — наихудший радиус. Все значения признаков записываются с четырьмя значащими цифрами.

Отсутствующие значения атрибута: нет

Распределение по классам: 357 доброкачественных (не рак), 212 злокачественных (рак)

Ожидаемые результаты

  • Моделирование данной проблемы в виде случайного графа
  • Статистическое моделирование и извлечение выводов
  • Построение пайплайнов моделей и оркестровка

Знание:

  • Знание случайных графиков и статистического обучения
  • Формулировка гипотезы и проверка
  • Статистический анализ

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

Исследование данных — это подход, аналогичный первоначальному анализу данных, при котором аналитик данных использует визуальное исследование, чтобы понять, что находится в наборе данных и характеристиках данных, а не с помощью традиционных систем управления данными.

Прежде чем делать что-либо вроде выбора признаков, извлечения признаков и классификации, сначала мы начнем с базового анализа данных.

Одномерный анализ

Самый простой тип анализа данных называется одномерным анализом. Uni означает «один», поэтому ваши данные содержат только одну переменную. В отличие от регрессии, она не имеет дело с причинами или отношениями; скорее, он находит закономерности в данных, беря данные, обобщая их и описывая.

По характеристикам можно сделать следующие выводы:

  • Существует только один отдельный столбец, который называется «Идентификатор».
  • Имеется 569 вхождений данных.
  • Всего 33 функции, 31 из которых числовые, включая идентификацию и диагностику.
  • В одном столбце/метке данных с именем «Безымянный 32» из объектов были все нулевые значения, поэтому мы удалили этот столбец. Нам это не нужно, потому что функция 32 включает NaN/отсутствующее значение.
  • Записи без дубликатов.

Распределение каждой функции

Из распределения каждого признака мы можем сделать вывод, что:

  • Существует большой разброс в значениях area_mean и area_worst.
  • Есть много переменных, которые имеют медианное значение 0.
  • Максимальное значение функции area_worst – 4254, а максимальное значение функции fractal_dimension_se – 0,029840. Это указывает на то, что нам необходимо стандартизировать или нормализовать данные перед визуализацией, выбором признаков и классификацией.
  • Гистограмма диагноза показывает, что соотношение злокачественных и доброкачественных пациентов составляет 37% (212/569). ) и 63% (357/569) соответственно.

Двумерный анализ

Двумерный анализ — это разновидность статистического анализа, в котором две переменные сопоставляются друг с другом. Одна из переменных будет зависимой, а другая независимой. Переменные обозначаются X и Y. Изменения анализируются между двумя переменными, чтобы понять, в какой степени произошло изменение.

Скрипичный график – это графическое представление данных, в котором значения обозначены цветом. Сюжет для скрипки преследует ту же цель, что и сюжет для усов или ящиков.

Перед построением наших данных нам нужно нормализовать или стандартизировать. Потому что различия между значениями признаков очень велики, чтобы наблюдать на графике. Мы наносим объекты на две группы, и каждая группа включает 15 объектов для лучшего наблюдения.

Прежде чем использовать графики скрипки и роя, нам необходимо нормализовать или стандартизировать их. Потому что различия между значениями признаков очень велики, чтобы наблюдать на графике. Я наношу объекты на 3 группы, и каждая группа включает 15 объектов, чтобы лучше наблюдать.

Зеленым цветом обозначены злокачественные случаи, а оранжевым — доброкачественные. Например, в функциях radius_mean,texture_mean,perimeter_mean, area_mean, compactness_mean, concavity_mean и concave_points_mean медиана злокачественного и доброкачественного состояния выглядит разделенной, что может быть полезно для классификации. Однако в функциях fractal_dimension_mean, texture_se и smoothness_se медиана злокачественного и доброкачественного состояния не выглядит разделенной, поэтому она не дает хорошей информации для классификации.

Сюжет роя

Сюжет роя очень похож на ленточный сюжет. Это в основном точечная диаграмма, где ось X представляет категориальную переменную. Типичное использование полосовой диаграммы включает в себя применение небольшого случайного значения дрожания к каждой точке данных, чтобы разделение между точками стало более четким.

Перед построением наших данных нам необходимо нормализовать или стандартизировать. Потому что различия между значениями признаков очень велики, чтобы наблюдать на графике. Я наношу объекты на две группы, и каждая группа включает 15 объектов, чтобы лучше наблюдать. Мы увидим первые 15 функций:

Доброкачественные и злокачественные пациенты обозначены синим и красным соответственно. Различия более очевидны. На предыдущем рисунке роя видно, что доброкачественные и злокачественные рои в основном, но не полностью, разделены средним значением радиуса и area_se. Однако приведенные выше показатели среднего значения гладкости, среднего значения симметрии, среднего значения фрактальной размерности и среднего значения текстуры на графике роя, по-видимому, смешивают доброкачественные и раковые клетки, что затрудняет диагностику с использованием этих функций.

Корреляция

Тепловая карта — это графическое представление данных, в котором значения обозначены цветом. Здесь мы создадим тепловую карту корреляционной матрицы непрерывных признаков.

Среднее значение радиуса, среднее значение периметра и среднее значение площади тесно связаны друг с другом, как видно на графике тепловой карты, поэтому мы можем выбрать один из них.

Существует корреляция между средним значением компактности, средним значением вогнутости и средним значением точек вогнутости. В результате мы можем выбрать один из них. Помимо этого, мы можем использовать одну из связанных функций радиуса se, периметра se или площади se. Мы можем выбрать наихудший радиус, наихудший периметр или наихудшую площадь, потому что все они связаны. Мы можем выбрать наихудшую компактность, наихудшую вогнутость и наихудшую вогнутость точек. Мы можем использовать компактность se, вогнутость se или вогнутые точки se. Мы можем использовать одну из средних или худших текстур, потому что они связаны. Мы можем использовать одну из худших областей или среднюю площадь, потому что они связаны.

Причинный вывод

Моделирование причинно-следственных сетей с помощью CausalNex

Структура из предметной области

Мы можем вручную определить модель структуры, указав отношения между различными функциями.

Во-первых, мы должны создать пустую модель структуры.

import warnings
from causalnex.structure import StructureModel

warnings.filterwarnings("ignore")  # silence warnings

sm = StructureModel()

Визуализация структуры

Теперь мы можем применить алгоритм NOTEARS для изучения структуры.

sm_data = from_pandas(data.iloc[:, :], w_threshold=0.8, tabu_parent_nodes=['diagnosis'])

но часто бывает более интуитивно визуализировать это. CausalNex предоставляет модуль построения графиков, который позволяет нам это делать.

# Plotting the Structure Model
viz = plot_structure(
    sm_data,
    prog="circo",
    graph_attributes=graph_attributes,
    node_attributes=node_attributes,
    all_edge_attributes=EDGE_STYLE.WEAK)
    
Image(viz.draw(format='png'))

Причина, по которой у нас здесь полносвязный граф, заключается в том, что мы не применили пороговое значение к более слабым ребрам. Пороговое значение можно применить, либо указав значение параметра w_threshold в from_pandas, либо мы можем удалить ребра, вызвав функцию модели структуры remove_edges_below_threshold.

Также мы применили диагностику в качестве целевого подграфа:

sm.remove_edges_below_threshold(0.8)
target = sm_data.get_target_subgraph('diagnosis')
# Plotting the Structure Model
viz = plot_structure(
    sm_data,
    prog="circo",
    graph_attributes=graph_attributes,
    node_attributes=node_attributes,
    all_edge_attributes=EDGE_STYLE.WEAK)
    
Image(viz.draw(format='png'))

Сходство с Жаккаром

Индекс Жаккара, также известный как коэффициент подобия Жаккара, представляет собой статистику, используемую для оценки сходства и разнообразия наборов выборок. Он был разработан Гроувом Карлом Гилбертом в 1884 году в качестве его коэффициента проверки, и теперь его часто называют индексом критического успеха в метеорологии.

Индекс находится в диапазоне от 0 до 1. Чем ближе к 1, тем более похожи два набора данных. Если два набора данных имеют одни и те же элементы, их индекс сходства Жаккара будет равен 1. И наоборот, если у них нет общих элементов, их сходство будет равно 0.

Чтобы определить, стабилен ли наш график, мы делим наши данные на половинные и полные, или 50% и 100% соответственно.

Чтобы вычислить сходство Жаккара:

def jaccard_similarity(sm1, sm2):
    i = set(sm1).intersection(sm2)
    return round(len(i) / (len(sm1) + len(sm2) - len(i)), 3)

У нас есть:

Jaccard Index = 0.82
With Jaccard distance of 1 – 0.82 = 0.18 or 18%
82% is a good similarity Jaccard index.
Our Graph is stable

Извлечение признаков из причинных сетей

Первоначально набор данных содержал 30 признаков. После выполнения расчетов причинно-следственной связи мы выделили 20 признаков, которые имеют прямую причинно-следственную связь с диагнозом.

Извлеченные функции:

['radius_mean',
 'texture_mean',
 'perimeter_mean',
 'compactness_mean',
 'concavity_mean',
 'concave points_mean',
 'symmetry_mean',
 'fractal_dimension_mean',
 'radius_se',
 'texture_se',
 'perimeter_se',
 'area_se',
 'concavity_se',
 'radius_worst',
 'texture_worst',
 'perimeter_worst',
 'area_worst',
 'compactness_worst',
 'concavity_worst',
 'concave points_worst']

Позже мы будем использовать эти функции для обучения моделей мл.

Применение моделей машинного обучения

Конвейер в SkLearn Использование всех функций набора данных

Конвейерная логистическая регрессия:

pipeline_lr = Pipeline([
    ('scaler1',StandardScaler()),
    ('pca1', PCA(n_components=2)),
    ('lr_classifier', LogisticRegression(random_state=0))
])

Классификатор дерева решений конвейера:

pipeline_dtc= Pipeline([
    ('scaler2', StandardScaler()),
    ('pca2', PCA(n_components=2)),
    ('dt_classifier', DecisionTreeClassifier())
])

Конвейерный классификатор случайного леса:

pipeline_rfc = Pipeline([
    ('scaler3', StandardScaler()),
    ('pca2', PCA(n_components=3)),
    ('rf_classifier', RandomForestClassifier())
])

Словарь типов конвейеров и классификаторов для удобства поиска и применения метода подгонки:

pipe_dict = { 0: 'Logistic Regression', 1: 'Decision Tree', 2:'RandomForest'}

# fit the pipleline 
for pipe in pipeline:
    pipe.fit(X_train, y_train)

Используя метод конвейерной подгонки, мы определили точность каждой модели, и дерево решений дало наивысшую точность.

Logistic Regression Test Accuracy: 0.9
Decision Tree Test Accuracy: 0.95
RandomForest Test Accuracy: 0.9
classifier with best accuracy: Decision Tree

Прогнозируемый и фактический график

Конвейер в SkLearn Использование функций, извлеченных из сети причинно-следственных связей

Использование тех же моделей, что и предыдущие три модели, для извлечения характеристик из графа причинно-следственных связей приводит к другим результатам.

Используя метод конвейерной подгонки, мы определили точность каждой модели, и логистическая регрессия дала наивысшую точность.

Logistic Regression Test Accuracy: 1.0
Decision Tree Test Accuracy: 0.9
RandomForest Test Accuracy: 0.95
classifier with best accuracy: Logistic Regression

Прогнозируемый и фактический график

Заключение

По сравнению с использованием всех функций разработанная нами модель машинного обучения работает лучше, используя выбранные функции из графиков причинно-следственных связей.

Выявлены весовые характеристики размеров клеток, которые наиболее эффективны при определении наличия у пациента злокачественного (раковая опухоль) или доброкачественного состояния (не раковая опухоль).

Вы можете получить исходный код на github: