Раскрытие возможностей математических моделей

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

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

Наша математическая модель: логистическая функция

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

куда,

X₀ = значение X средней точки сигмовидной кишки

L = максимальное значение кривой

k = скорость логистического роста или крутизна кривой.

Логистическая функция может принимать любое значение x от -∞ до + ∞. Для x, приближающегося к + ∞, f (x) приближается к L, а для x, приближающегося к -∞, f (x) приближается к 0.

Стандартная сигмовидная функция возвращает значение в диапазоне от 0 до 1. Уравнение задается следующим образом:

Для x = 0 S (x = 0) = 0,5

x ‹0, S (x‹ 0) ‹0,5 и x› 0, S (x ›0)› 0,5

Итак, сигмовидная функция имеет нулевой центр.

Постановка задачи

У нас есть финансовые данные клиентов. Одна из его особенностей - это сумма кредита, то есть кредит уже на имя клиента. Теперь, в зависимости от суммы кредита, мы намерены получить оценку риска от 0 до 1.

Распределение данных может различаться в разных наборах данных и среди разных функций. Давайте посмотрим на распределение кредитной_ суммы.

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

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

В нашем случае мы придумаем идеальное поведение и попытаемся изучить параметры логистической функции, которые могут лучше всего имитировать идеальное поведение. Давайте определим идеальное поведение:

  1. Оценка риска должна быть в диапазоне от 0 до 1.
  2. Данные должны быть сосредоточены на 65-м процентиле данных. (Предположение, поскольку мы хотим больше наказывать выбросов)
  3. В идеале мы хотим, чтобы оценка для 65-го процентиля составляла 0,50, для 75-го процентиля - 0,65, для 80-го процентиля - 0,70 и 85-го процентиля - 0,75. Что касается остальных данных, мы хотим, чтобы оценки менялись соответственно.
  4. Различные функции могут иметь разное распределение и диапазон, поэтому мы хотим разработать метод, который позволяет изучать параметры логистической функции в соответствии с идеальным поведением, определенным на шаге 3.

Для нашей задачи определения оценки риска для credit_amount с помощью логистической функции давайте расшифруем параметры.

куда,

X₀ = значение X средней точки сигмовидной кишки

L = максимальное значение кривой

k = скорость логистического роста или крутизна кривой.

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

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

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

# Logistic function ~ b denotes X₀ and c denotes k(growth rate)
def sigmoid(x,b,c):
    return 1 / (1 + math.exp(-c * (x-b)))

Ошибка вычисления вероятного темпа роста «k»

# Mean Squared error between ideal and observed behavior
# b denotes X₀ and c denotes k(growth rate)
def cal_error(c,pcts,values_expected):
    error = math.pow(sigmoid(pcts[0],pcts[3],c) - values_expected[0],2) + math.pow(sigmoid(pcts[1],pcts[3],c) - values_expected[1],2) + math.pow(sigmoid(pcts[2],pcts[3],c) - values_expected[2],2) + math.pow(sigmoid(pcts[3],pcts[3],c) - values_expected[3],2)
    return error

Произвольный поиск, чтобы найти лучший "k", скорость роста

def find_best_decay_parameter(pcts,values_expected):
    best_error = 999999
    best_c = 1.0
    iterations = 5000
    for i in range(iterations):
        tmp = random.random()
        error = cal_error(tmp,pcts,values_expected)
        if error<best_error:
            best_error = error
            best_c = tmp
    return best_c

Вызов функции

percentiles =     [85,80,75,65]
values_expected = [0.75,0.70,0.65,0.50]
b,c = find_decay_parameter(df.credit_amount,values_expected)

Выход

Best value of Growth rate 'k' =  0.00047
Value of L = 1
value of X₀ = 3187
                   65th  75th  80th  85th
Value              3187  3972  4720  5969
Expected Score     0.50  0.65  0.70  0.75
Observed Score     0.50  0.59  0.67  0.79

Я проверил, как меняется оценка в зависимости от суммы кредита.

credit_amounts = [100,500,1200,3000,4000,5200,6000,7500,10000,12000,20000,25000]
risk = []
mp_values = {}
for credit_amount in credit_amounts:
    mp_values[credit_amount] = round(sigmoid(credit_amount,b,c),2)

Выход:

Найдя правильное значение для параметров «L», «X» и «k», мы подобрали математическую модель, чтобы получить оценку риска, близкую к идеальному поведению, которое мы хотели, то есть к большему наказанию выбросов.

Улучшения

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

В этом случае мы можем сначала найти вес / важность каждой переменной, так что веса в сумме будут равны 1. Затем мы можем подогнать индивидуальную логистическую функцию к каждой переменной и, наконец, вычислить взвешенную сумму индивидуальной оценки риска.

Возьмем пример с 3 переменными, их оценками риска и весами.

Окончательная оценка риска = 0,72 * 0,3 + 0,65 * 0,25 + 0,81 * 0,45 = 0,743

Заключение

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

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

Мой канал Youtube для получения дополнительной информации:



Об авторе:

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

Мой мотив всегда состоит в том, чтобы упростить самые сложные вещи до их наиболее упрощенной версии. Я люблю решение проблем, науку о данных, разработку продуктов и масштабируемые решения. Я люблю исследовать новые места и заниматься спортом в свободное время. Следуйте за мной в Medium, Linkedin или Instagram и просматривайте мои предыдущие сообщения. Приветствую отзывы и конструктивную критику. Некоторые из моих блогов -