逻辑回归原理详解-附案例及源码(三)

本文详细介绍了评分卡模型的构建过程,包括风险特征分析、规则提炼和模型上线,并结合逻辑回归源码进行深入讲解。通过修改逻辑回归的激活函数、去掉偏置值、权重取整以及获取预测数据,实现了评分卡模型的改进。
摘要由CSDN通过智能技术生成


    上一章( 损失函数梯度下降实例讲解及其凹凸性证明)我们通过实例演示了逻辑回归损失函数梯度下降的迭代过程,本章将使用逻辑回归算法来构建金融风控中常用的评分卡模型,将对逻辑回归源码进行讲解,并对算法进行改进构建评分卡。

一、什么是评分卡模型

    金融反欺诈实时监控模型中较为常见的就是评分卡模型,具有简单高效、解释性强、易于调优等优点,其建模流程大致可分为三步:
    第一步,对风险客户离线信息进行溯源分析,归纳总结客户动账、登录等交易风险特征;
    第二步,对风险交易特征进行规则提炼,设置相应阈值、分值;
    第三步,实时规则上线、调优、迭代等。
    评分卡模型规则集合示例如下表所示:
在这里插入图片描述
    从表中可以看出,评分卡模型将客户命中的规则得分进行求和,当分值高于100分时,判定为高风险;低于100分值时,判定为低风险,评分卡的本质就是逻辑回归二分类模型。

二、逻辑回归源码

    由于sklearn中LogisticRegression类的源码有很多的属性和方法我们都用不到,所以在此就不详细的讲解sklearn中逻辑回归源码,有兴趣的可以通过下面链接了解,官方文档英文版,链接:逻辑回归官方文档英文版
    逻辑回归的主要方法代码如下:

import numpy as np
import pandas as pd


class LogisticRegression(object):
    def __init__(self):
        """
        初始化 Logistic Regression 模型
        """
        self.coef = None  # 权重矩阵
        self.intercept = None  # 截距
        self._theta = None  # _theta[0]是intercept,_theta[1:]是coef

    def sigmoid(self, x):
        """
        sigmoid 函数
        :param x: 参数x
        :return: 取值y
        """
        y = 1.0 / (1.0 + np.exp(-x))
        return y

    def loss_func(self, theta, x_b, y):
        """
        损失函数
        :param theta: 当前的权重和截距
        :param x_b: 修改过的数据集(第一列为全1)
        :param y: 数据集标签
        :return:
        """
        p_predict = self.sigmoid(x_b.dot(theta))
        try:
            return -np.sum(y * np.log(p_predict) + (1 - y) * np.log(1 - p_predict))
        except:
            return float('inf')

    def d_loss_func(self, theta, x_b, y):
        """
        损失函数的导数
        :param theta: 当前的权重和截距
        :param x_b: 修改过的数据集(第一列为全1)
        :param y: 数据集标签
        :return:
        """
        out = self.sigmoid(x_b.dot(theta))  # 计算sigmoid函数的输出结果
        return x_b.T.dot(out - y) / len(x_b)

    def gradient_descent(self, x_b, y, initial_theta, eta, n_iters=1e4, epsilon=1e-8):
        """
        梯度下降函数
        :param x_b: 修改过的数据集(第一列为全1)
        :param y: 数据集标签
        :param initial_theta: 初始权重矩阵
        :param eta: 学习率
        :param n_iters: 最大迭代周期
        :param epsilon: 当两次训练损失函数下降小于此值是提前结束训练
        :return:
        """
        theta = initial_theta
        i_iter = 0
        while i_iter < n_iters:
            gradient = self.d_loss_func(theta, x_b, y)
            last_theta = theta
            theta = theta - eta * gradient
            i_iter += 1
            if abs(self.loss_func(theta, x_b
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值