Моделирование доходности кредитной карты с помощью процесса принятия решений Маркова.
Это со ссылкой на документ, опубликованный по моделированию доходности кредитных карт обработанным Марковым решением. Я пытаюсь реализовать то же самое в python, используя Mdptoolbox, но не получаю вывод в ожидаемом формате.
Мои штаты - это сочетание текущей оценки риска и текущего кредитного лимита клиента. Мои действия - увеличить лимит клиента.
Я подготовил свои переходные вероятности для каждого состояния.
При запуске кода MDP с использованием Python MDPtoolbox я получаю вектор политики, которого недостаточно для моего использования, поскольку мне нужно иметь оптимальную политику для комбинации каждого показателя риска и кредитного лимита. Мой текущий вывод говорит мне, чтобы увеличить предел определенной полосы риска до нового предела, который является слишком общим.
import mdptoolbox
import numpy as np
transitions = np.array([
#Limit1
[
[0.2, 0.798, 0.001, 0.001], #s1
[0.001, 0.1, 0.2, 0.699], #s2
[0.099, 0.001, 0.8, 0.1], #s3
[0.001, 0.001, 0.898, 0.1] #s4
],
#Limit2
[
[0.2, 0.001, 0.001, 0.798], #s1
[0.001, 0.2, 0.798, 0.001], #s2
[0.001, 0.4, 0.1, 0.499], #s3
[0.1, 0.2, 0.001, 0.699] #s4
],
#Limit3
[
[0.001, 0.1, 0.001, 0.898], #s1
[0.798, 0.2, 0.001, 0.001], #s2
[0.001, 0.001, 0.001, 0.997], #s3
[0.001, 0.2, 0.5, 0.299] #s4
],
#Limit4
[
[0.2, 0.001, 0.001, 0.798], #s1
[0.1, 0.001, 0.299, 0.6], #s2
[0.001, 0.1, 0.001, 0.898], #s3
[0.001, 0.001, 0.1, 0.898] #s4
]
])
rewards = np.array([
[0, 0, 0.9, 0.1],
[0, 0.8, 0, 0.2],
[0.1, 0, 0.7, 0.2],
[0, 0, 0, 1.0]
])
vi = mdptoolbox.mdp.ValueIteration(transitions, rewards,0.995)
vi.run();
vi.policy
vi.V
Окончательная политика, которую я получаю:
vi.policy
Out[86]: (2, 1, 2, 3)
который только говорит о том, что увеличьте лимит клиента с оценкой риска S1 до предела 2 и так далее. который слишком общий. То, что я ожидаю, - это матричная политика, которая говорит мне, какой лимит я должен увеличить для каждой комбинации оценки кредитного риска и лимита.