Диаграмма с выбросами: синий популяционный график и красная аномалия.

Создание надежных моделей кредитного скоринга (Часть 3)

Обработка выбросов и пропущенных значений в данных о заемщиках с использованием Python.

Делиться

98317bda1cc66ee5d539a58148b52256

Эта статья — третья часть серии, которую я решил написать о том, как построить надежную и стабильную модель кредитного скоринга на протяжении длительного времени.

Первая статья была посвящена тому, как создать набор данных для кредитного скоринга, а вторая рассматривала разведочный анализ данных (EDA) и способы лучшего понимания характеристик заемщика и кредита перед моделированием.

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

Целью проекта было разработать модель оценки, которая могла бы прогнозировать кредитный риск заемщика на горизонте одного месяца. Как только мы получили данные, первым шагом стало проведение разведочного анализа данных. В моей предыдущей статье я кратко объяснил, почему разведочный анализ данных необходим для понимания структуры и качества набора данных.

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

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

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

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

Ещё один вопрос касался роли экспертов в данной области . На каком этапе их следует привлекать к процессу? Должны ли они участвовать на ранних этапах подготовки данных или только позже, при интерпретации результатов? Мы также столкнулись с более техническими вопросами. Например, следует ли восполнять пропущенные значения до обработки выбросов или наоборот?

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

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

Для иллюстрации представленных здесь шагов мы используем тот же набор данных, что и в предыдущей статье об разведочном анализе данных. Этот набор данных является открытым набором данных, доступным на Kaggle: Credit Scoring Dataset. Он содержит 32 581 наблюдение и 12 переменных, описывающих кредиты, выданные банком отдельным заемщикам.

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

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

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

Создание временной переменной

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

Для решения этой проблемы мы создаём искусственную временную переменную, которую называем годом.

Мы создаём эту переменную, используя cb_person_cred_hist_length, которая представляет собой продолжительность кредитной истории заёмщика . Эта переменная имеет 29 различных значений , от 2 до 30 лет . В предыдущей статье, когда мы разделили её на квартили, мы заметили, что дефолт ставка остался относительно стабильный через интервалы, около 21% .

Именно такое поведение нам и нужно для переменной «год»: относительно стабильный уровень дефолтов, то есть уровень дефолтов остается неизменным в разные периоды времени.

Для построения этой переменной мы делаем следующее предположение. Мы произвольно предполагаем, что заемщики с 2-летней кредитной историей вошли в портфель в 2022 году, заемщики с 3-летней историей — в 2021 году и так далее. Например, значение в 10 лет соответствует записи в 2014 году. Наконец, все заемщики с кредитной историей, превышающей или равной 11 годам, объединяются в одну категорию, соответствующую записи в 2013 году.

6a19367ef245bb34f00e825a288f7091

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

Наборы данных для обучения и проверки

В этом разделе рассматривается важный методологический вопрос: следует ли разделять данные до проведения обработки данных и предварительного отбора переменных или после?

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

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

В статистическом моделировании для достижения этой цели обычно используются три типа наборов данных:

  • Обучающий (или проверочный) набор данных используется для оценки и подгонки параметров модели.
  • Набор данных для валидации/тестирования (в режиме реального времени) использовался для оценки качества подгонки модели к данным, которые не использовались во время обучения.
  • Набор данных для проверки вневременного анализа (Out-of-time validation dataset, OOT) используется для оценки производительности модели на данных из другого временного периода , что помогает оценить, остается ли модель стабильной с течением времени.

На практике также широко используются другие стратегии проверки, такие как k-кратная перекрестная проверка или проверка методом исключения одного образца .

Определение набора данных

В этом разделе мы приводим пример создания наборов данных, используемых в нашем анализе: обучающий , тестовый и OOT .

Набор данных для разработки (обучающая и тестовая выборки) охватывает период с 2013 по 2021 год. В рамках этого набора данных:

  • 70% наблюдений отнесены к обучающему набору.
  • 30% отводится на тестовый набор.

Данные OOT соответствуют 2022 году .

e784ccd4def83fb4e2b91b81c3cae270

train_test_df = df[df[«year»] <= 2021].copy() oot_df = df[df["year"] == 2022].copy() train_test_df.to_csv("train_test_data.csv", index=False) oot_df.to_csv("oot_data.csv", index=False)

Сохранение обобщения модели

Для сохранения способности модели к обобщению, после разделения набора данных на обучающую, тестовую и OOT-выборку, тестовый и OOT-наборы данных должны оставаться полностью неизменными в процессе разработки модели.

На практике их следует рассматривать как скрытые и использовать только после определения стратегии моделирования и обучения моделей-кандидатов. Эти наборы данных позволят нам впоследствии сравнить производительность моделей и выбрать окончательную модель.

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

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

Разделение набора данных для разработки на обучающую и тестовую выборки.

Для обучения и оценки различных моделей мы разделили набор данных для разработки (2013–2021 гг.) на две части:

  • обучающий набор (70%)
  • тестовый набор (30%)

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

def_year = def + year

Эта переменная позволяет нам сохранить как стандартную скорость , так и временную структуру данных при разделении набора данных.

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

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

from sklearn.model_selection import train_test_split train_test_df[«def_year»] = train_test_df[«def»].astype(str) + «_» + train_test_df[«year»].astype(str) train_df, test_df = train_test_split(train_test_df, test_size=0.2, random_state=42, stratify=train_test_df[«def_year»]) # сохранение баз train_df.to_csv(«train_data.csv», index=False) test_df.to_csv(«test_data.csv», index=False) oot_df.to_csv(«oot_data.csv», index=False)

16bcbd120ee65392be013b732d5fd15d

В следующих разделах все анализы проводятся с использованием обучающих данных.

Лечение выбросов

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

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

В нашем наборе данных шесть непрерывных переменных. Ниже представлены их диаграммы размаха и графики плотности распределения.

d32dc9a0b7b2f110053a5c70fa1e7a75
f4d3d1989b9ec3ef1391cffe9a632201

В таблице ниже для каждой переменной представлены нижняя и верхняя границы, определяемые следующим образом:

Нижняя граница = Q1 – 1,5 x IQR

Верхняя граница = Q3 + 1,5 x IQR

где IQR = Q3 – Q1, а (Q1) и (Q3) соответствуют первому и третьему квартилям соответственно.

bfeb011e7e9c831b50e94f19eee70612

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

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

Из приведенной выше таблицы видно, что метод межквартильного размаха (IQR) ограничил бы возраст заемщиков 51 годом. Этот результат приемлем только в том случае, если исследуемая популяция изначально была определена с максимальным возрастом 51 год. Если это ограничение не входило в первоначальную концепцию, пороговое значение следует обсудить с экспертами в данной области, чтобы определить разумную верхнюю границу для этой переменной.

Предположим, например, что в портфель входят заемщики в возрасте до 60 лет . В этом случае метод межквартильного размаха (IQR) не подойдет для обработки выбросов в переменной person_age, поскольку он искусственно исключит из выборки достоверные наблюдения.

В таком случае можно рассмотреть два варианта. Во-первых, эксперты в данной области могут указать максимально допустимый возраст, например, 100 лет, что определит допустимый диапазон значений переменной. Другой подход заключается в использовании метода, называемого винзоризацией.

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

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

Этот подход можно применять двумя способами:

  • Односторонняя винзоризация , при которой ограничивается только одна сторона распределения.
  • Двусторонняя винзоризация , при которой усекаются как нижний, так и верхний хвосты.
33c9be5b09a36d4f817f652dbd2a2d6c

В этом примере все наблюдения со значениями ниже €6 заменяются на €6 для интересующей нас переменной. Аналогично, все наблюдения со значениями выше €950 заменяются на €950.

Мы вычисляем 90-й, 95-й и 99-й процентили переменной person_age, чтобы подтвердить, подходит ли метод межквартильного размаха (IQR). Если нет, мы будем использовать 99-й процентиль в качестве верхней границы для подхода винзоризации.

c8c32fa343e2800fde9f6e9f6db271dc

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

def apply_iqr_bounds(train, test, oot, variables): train = train.copy() test = test.copy() oot = oot.copy() bounds = [] for var in variables: Q1 = train[var].quantile(0.25) Q3 = train[var].quantile(0.75) IQR = Q3 — Q1 lower = Q1 — 1.5 * IQR upper = Q3 + 1.5 * IQR bounds.append({ «Variable»: var, «Lower Bound»: lower, «Upper Bound»: upper }) for df in [train, test, oot]: df[var] = df[var].clip(lower, upper) bounds_table = pd.DataFrame(bounds) return bounds_table, train, test, oot bounds_table, train_clean_outlier, test_clean_outlier, oot_clean_outlier = apply_iqr_bounds( train_df, test_df, oot_df, variables )

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

Заполнение пропущенных значений

В наборе данных содержатся две переменные с пропущенными значениями : loan_int_rate и person_emp_length. Распределение пропущенных значений в обучающем наборе данных представлено в таблице ниже.

6ff834863c8df2c3aa81eec869e313a1

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

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

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

Случай переменной person_emp_length

На рисунке ниже показаны диаграммы размаха непрерывных переменных в зависимости от того, отсутствует ли значение переменной person_emp_length или нет.

24513ee22c54d80fa430bb658d3e6e01

Можно наблюдать несколько различий. Например, наблюдения с пропущенными значениями, как правило, имеют:

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

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

  • Критерии Колмогорова-Смирнова или Краскала-Уоллиса для непрерывных переменных.
  • Критерий Крамера V для категориальных переменных.

Как правило, такие анализы показывают, что вероятность отсутствия значения зависит от наблюдаемых переменных. Этот механизм известен как MAR (Missing At Random — случайное отсутствие данных).

В рамках MAR можно рассмотреть несколько методов импутации, включая подходы машинного обучения, такие как метод k-ближайших соседей (KNN).

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

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

Случай переменной loan_int_rate

При анализе взаимосвязи между loan_int_rate и другими непрерывными переменными графический анализ не выявляет четких различий между наблюдениями с пропущенными значениями и наблюдениями без них.

ca7fd6c291d95ff0621e01fac684eae0

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

Этот тип механизма обычно называют MCAR (Missing Completely At Random — полное случайное отсутствие данных) . В этом случае отсутствие данных не зависит ни от наблюдаемых, ни от ненаблюдаемых переменных.

Когда механизм пропуска данных — MCAR (Multiple Carry — случайный пропуск), обычно достаточно простой стратегии импутации. В данном исследовании мы решили импутировать пропущенные значения loan_int_rate, используя медиану, которая устойчива к экстремальным значениям.

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

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

def impute_missing_values(train, test, oot, emp_var=»person_emp_length», rate_var=»loan_int_rate», emp_value=0): «»» Заполняет пропущенные значения, используя статистические данные, вычисленные на обучающем наборе данных. Параметры ———- train, test, oot : pandas.DataFrame Наборы данных для обработки. emp_var : str Переменная, представляющая продолжительность занятости. rate_var : str Переменная, представляющая процентную ставку. emp_value : int или float Значение, используемое для заполнения продолжительность занятости (консервативная стратегия). Возвращает ——- train_imp, test_imp, oot_imp : pandas.DataFrame Заполненные наборы данных. «»» # Копирование наборов данных во избежание изменения оригиналов train_imp = train.copy() test_imp = test.copy() oot_imp = oot.copy() # —————————- # Вычисление Статистика по TRAIN # —————————- rate_median = train_imp[rate_var].median() # —————————- # Создание индикаторов отсутствующих данных # —————————- for df in [train_imp, test_imp, oot_imp]: df[f»{emp_var}_missing»] = df[emp_var].isnull().astype(int) df[f»{rate_var}_missing»] = df[rate_var].isnull().astype(int) # —————————- # Применение импутации # —————————- for df in [train_imp, test_imp, oot_imp]: df[emp_var] = df[emp_var].fillna(emp_value) df[rate_var] = df[rate_var].fillna(rate_median) return train_imp, test_imp, oot_imp ## Применение метода импутации train_imputed, test_imputed, oot_imputed = impute_missing_values( train=train_clean_outlier, test=test_clean_outlier, oot=oot_clean_outlier, emp_var=»person_emp_length», rate_var=»loan_int_rate», emp_value=0 )

Мы обработали как выбросы, так и пропущенные значения. Чтобы статья оставалась сфокусированной и не получилась слишком длинной, мы остановимся здесь и перейдем к заключению. На этом этапе обучающий, тестовый и OOT-наборы данных можно безопасно сохранить.

train_imputed.to_csv(«train_imputed.csv», index=False) test_imputed.to_csv(«test_imputed.csv», index=False) oot_imputed.to_csv(«oot_imputed.csv», index=False)

В следующей статье мы проанализируем корреляции между переменными для проведения надежного отбора переменных. Мы также представим дискретизацию непрерывных переменных и изучим два важных свойства моделей кредитного скоринга: монотонность и стабильность во времени.

Заключение

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

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

Для сохранения этой способности к обобщению все этапы предварительной обработки должны быть откалиброваны с использованием только обучающего набора данных, при этом должна сохраняться строгая независимость от тестового набора данных и набора данных, полученного вне обучающего периода (OOT). После определения преобразований на обучающих данных их необходимо точно воспроизвести на тестовом наборе данных и наборе данных OOT.

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

Источник изображений

Все изображения и визуализации в этой статье были созданы автором с использованием Python (pandas, matplotlib, seaborn и plotly) и Excel, если не указано иное.

Ссылки

[1] Лоренцо Беретта и Алессандро Сантаньелло.
Алгоритмы заполнения пропущенных данных методом ближайшего соседа: критическая оценка.
Национальная медицинская библиотека, 2016.

[2] Nexialog Consulting.
Traitement des données manquantes в банковской среде.
Рабочий документ, 2022 год.

[3] Джон Т. Хэнкок и Таги М. Хошгофтаар.
Обзор категориальных данных для нейронных сетей.
Журнал больших данных, 7(28), 2020.

[4] Мелисса Дж. Азур, Элизабет А. Стюарт, Константин Франгакис и Филип Дж. Лиф.
Метод множественной импутации с помощью цепных уравнений: что это такое и как он работает?
Международный журнал методов психиатрических исследований, 2011.

[5] Маджид Сармад.
Надежный анализ данных для факторных экспериментальных планов: усовершенствованные методы и программное обеспечение.
Кафедра математических наук, Даремский университет, Англия, 2006.

[6] Дэниел Дж. Стеховен и Питер Бюльманн.
MissForest — Непараметрический метод восполнения пропущенных значений в данных смешанного типа. Биоинформатика, 2011.

[7] Суприянто Вибисоно, Анвар и Амин.
Обнаружение многомерных аномалий погоды с использованием алгоритма кластеризации DBSCAN.
Журнал физики: Серия конференций, 2021.

Данные и лицензирование

Набор данных, использованный в этой статье, распространяется под лицензией Creative Commons Attribution 4.0 International (CC BY 4.0) .

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

Для получения более подробной информации см. официальный текст лицензии: CC0: Общественное достояние.

Отказ от ответственности

Ответственность за любые оставшиеся ошибки или неточности несет автор. Отзывы и исправления приветствуются.

Источник: towardsdatascience.com

✅ Найденные теги: Кредитный, Модели, Надежность, новости, Скоринг, Создание, Часть

ОСТАВЬТЕ СВОЙ КОММЕНТАРИЙ

Каталог бесплатных опенсорс-решений, которые можно развернуть локально и забыть о подписках

галерея

Мужчина сидит на кровати в пижаме, задумавшись и поддерживая голову рукой.
Абстрактное изображение с синими и оранжевыми полосами на черном фоне, эффект света.
Абстрактные световые полосы синего и жёлтого цветов на чёрном фоне.
Компания Merit Medical Systems приобретает компанию View Point Medical путем слияния.
Компания Merit Medical Systems приобретает компанию View Point Medical путем слияния.
Робот сидит с пожилой женщиной на диване, держа её за руки.
ideipro logotyp
Рейтинг производительности ИИ моделей на CanIRun.ai, от B до F.
ideipro logotyp
Image Not Found
Мужчина сидит на кровати в пижаме, задумавшись и поддерживая голову рукой.

Миллионы людей начинают работу слишком рано. Этот препарат помогает им не заснуть.

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

Апр 7, 2026
Абстрактное изображение с синими и оранжевыми полосами на черном фоне, эффект света.

Световой трюк, которому 200 лет, преобразил квантовое шифрование.

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

Апр 7, 2026
Абстрактные световые полосы синего и жёлтого цветов на чёрном фоне.

Световой трюк, которому 200 лет, преобразил квантовое шифрование.

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

Апр 7, 2026
Компания Merit Medical Systems приобретает компанию View Point Medical путем слияния.

Компания Merit Medical Systems приобретает компанию View Point Medical путем слияния.

Компания Merit Medical ожидает, что сделка положительно повлияет на прибыль на акцию без учета GAAP. Фото: Michael Vi / Shutterstock.com….

Апр 7, 2026

Впишите свой почтовый адрес и мы будем присылать вам на почту самые свежие новости в числе самых первых