这是参考发表在建模信用卡盈利能力上的一篇论文,由处理的马尔可夫决策。我正在尝试使用 Mdptoolbox 在 python 中实现相同的功能,但没有获得预期格式的输出。
我的状态是客户当前风险评分和当前信用额度的组合。我的行动是增加客户的限额。
我已经为每个状态准备了我的转换概率。
在使用 Python MDPtoolbox 运行 MDP 代码时,我得到了一个不足以满足我使用的策略向量,因为我需要为每个风险评分和信用额度的组合制定最佳策略。我当前的输出告诉我将特定风险范围的限制增加到一个新的限制,这太通用了。
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,依此类推。这太笼统了。我期待的是矩阵策略,它告诉我应该为信用风险评分和限制的每种组合增加多少限制。