(五)机器学习模型的api调用之模型执行

本篇讲讲模型执行相关操作,以逻辑回归评分卡为示例。

根据已有模型,调用执行接口:
http://ip:port//model/execute
post
{
“modelFilePath”:"/data/model/lr.pkl",
“paramsData”:{
#这里是模型特征
}
}

后台代码如下:

import numpy as np
import pandas as pd
import scorecardpy as sc

#缓存变量
modelPath,binsPath='',''
bins,model=[],[]
    
@app.route('/model/execute',methods=['POST'])
def execute_data():
    start = time.time()
    try:
        global modelPath,binsPath,bins,model
        logger.info('入参:%s',str(request.get_data()))
        request_data = request.get_json() #获取传入数据
        paramsJson = request_data['paramsData']
        modelFilePath = modelFilePathCheck(request_data)

        if (type(paramsJson) == type({})):

            #原始数据中数值型字符串转为int64
            items = paramsJson.items();
            for key,value in items:
                if (is_number(value)):
                    paramsJson[key] = int(value)
            logger.info("paramsJson:%s",paramsJson)
            #构建dataFrame
            df = pd.json_normalize(paramsJson)

            if (modelPath != modelFilePath):
                logger.info('调用模型路径发生变化,重新加载模型!')
                logger.info('global modelFilePath:%s',modelPath)
                logger.info('param modelFilePath:%s',modelFilePath)
                modelPath = modelFilePath
                #导入模型
                model = joblib.load(modelFilePath)
            else:
                logger.info('调用模型路径未发生变化,使用缓存中模型。')
                logger.info('global modelFilePath:%s',modelPath)

            #原始数据转换为woe值
            bins = model.bins
            df_woe = sc.woebin_ply(df, bins)
            #打标签
            label = model.predict(df_woe)[0]

            #构建评分卡
            card = sc.scorecard(bins, model, df_woe.keys())
            #评分
            score = sc.scorecard_ply(df, card,only_total_score=False, print_step=0)
            #计算每个特征的得分
            featureScore = {}
            # featureScore = calculateFeatures(df, card)
            if isinstance(card, dict):
                card_df = pd.concat(card, ignore_index=True)
            elif isinstance(card, pd.DataFrame):
                card_df = card.copy(deep=True)
            # x variables
            xs = card_df.loc[card_df.variable != 'basepoints', 'variable'].unique()
            for i in xs:
                featureScore[i] = score[i + '_points'][0]

            result = {}
            result['code'] = '00000'
            result['score'] = str(score['score'][0])
            result['label'] = str(label)
            result['featureScore'] = featureScore
            end = time.time()
            logger.info("运行结果:%s,模型执行耗时:%s",result,end-start)
            return jsonify(result)

        code10002['errorMsg']='输入值错误:请传入json格式参数'
        return jsonify(code10002)
        
    except Exception as e:
        #do something

程序中加入了global变量来对模型进行缓存,目的是提高对同一模型的调用效率。


(一)机器学习模型的api调用之初探
(二)机器学习模型的api调用之日志打印
(三)机器学习模型的api调用之异常控制
(四)机器学习模型的api调用之特征查询
(五)机器学习模型的api调用之模型执行

源代码地址

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值