在银行这个极其庞杂的交易体系中,每天都能收集到大量的用户信息和用户数据。而伴随着我国利率市场化的不断深化,净利差的迅速收窄,各大银行都希望利用手头的大量用户信息和实时产生的用户数据,对用户进行深度分析挖掘以便进行风险管控和个性化营销,降低银行的运营成本,提升获利空间。本文利用机器学习算法中最简单的kNN算法,也称k-近邻算法,在Hadoop中实现用户的风险等级的分类,以便向用户推荐符合其风险承受能力范围内的产品,也便于对用户进行风险管控。
k-邻近算法的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征值与样本集中数据对应的特征值进行比较,然后算法提取样本集中特征最相似的数据(最邻近)的分类标签。一般来说,只选择样本数据集中前k个最相似的数据。最后选择k个最相似数据中出现次数最多的分类,作为新数据的分类。在本文要进行的用户风险等级分类中,为简明起见,我们把用户分成三类,风险承受能力低、风险承受能力低中、风险承受能力高。即每个用户都会对应着一个标签,低、中或者高。而对于每个用户,我们将从三个维度进行考察,分别是股票、基金、贵金属投资金额、理财产品投资金额、存款和货币市场投资金额(当然在实际用户风险承受能力的判断中,考虑的因素要比这个多很多,为了简单起见,只考虑用户的三个维度)。下图展示了某几个训练集中的用户数据。
用户 | 股票、基金及贵金属投资 | 理财产品投资 | 存款及货币市场投资 | 风险分类 |
---|---|---|---|---|
1 | 30000 | 10000 | 0 | high |
2 | 0 | 20000 | 20000 | middle |
3 | 0 | 0 | 40000 | low |
我们把一组已知的打好标签的用户数据放到Hadoop的HDFS上,作为训练的样本集,同时把另外一组打好标签的用户数据也放到HDFS上,作为测试数据。在kNN算法中,每一组数据都被看成一个节点,如在我们的客户承受风险分类的案例中,A用户可以表示成(xA0, xA1, xA2),xA0表示股票、基金、贵金属的投资金额,xA1表示理财产品的投资金额,xA2表示存款以及货币市场投资的金额。用户A的节点A(xA0, xA1, xA2)与用户B的节点(xB0, xB1, xB2)之间的距离采用欧式距离公式来计算。