金融风控实战——反欺诈评分卡的大致构建流程

# 导入包
import numpy as np
import pandas as pdimport warnings
warnings.filterwarnings('ignore')import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import seaborn as sns
plt.style.use('ggplot')import warnings
warnings.filterwarnings('ignore')
import sklearn
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from sklearn.metrics import confusion_matrix
from sklearn.manifold import TSNE
pass# 倒入并查看数据
crecreditcard_data=pd.read_csv('./creditcard.csv')
crecreditcard_data.shape,
crecreditcard_data.info()
#<class 'pandas.core.frame.DataFrame'>
#RangeIndex: 284807 entries, 0 to 284806
#Data columns (total 31 columns):
# #   Column  Non-Null Count   Dtype  
#---  ------  --------------   -----  
# 0   Time    284807 non-null  float64
# 1   V1      284807 non-null  float64
# 2   V2      284807 non-null  float64
# 3   V3      284807 non-null  float64
# 4   V4      284807 non-null  float64
# 5   V5      284807 non-null  float64
# 6   V6      284807 non-null  float64
# 7   V7      284807 non-null  float64
# 8   V8      284807 non-null  float64
# 9   V9      284807 non-null  float64
# 10  V10     284807 non-null  float64
# 11  V11     284807 non-null  float64
# 12  V12     284807 non-null  float64
# 13  V13     284807 non-null  float64
# 14  V14     284807 non-null  float64
# 15  V15     284807 non-null  float64
# 16  V16     284807 non-null  float64
# 17  V17     284807 non-null  float64
# 18  V18     284807 non-null  float64
# 19  V19     284807 non-null  float64
# 20  V20     284807 non-null  float64
# 21  V21     284807 non-null  float64
# 22  V22     284807 non-null  float64
# 23  V23     284807 non-null  float64
# 24  V24     284807 non-null  float64
# 25  V25     284807 non-null  float64
# 26  V26     284807 non-null  float64
# 27  V27     284807 non-null  float64
# 28  V28     284807 non-null  float64
# 29  Amount  284807 non-null  float64
# 30  Class   284807 non-null  int64  
#dtypes: float64(30), int64(1)
#memory usage: 67.4 MB
#((284807, 31), None)
crecreditcard_data.head(5)

在这里插入图片描述

# 看看欺诈与非欺诈的比例如何
count_classes=pd.value_counts(crecreditcard_data['Class'],sort=True).sort_index()
count_classes
#0    284315
#1       492
#Name: Class, dtype: int64
# 统计下具体数据
count_classes.value_counts()
# 也可以用count_classes[0],count_classes[1]看分别数据
count_classes.plot(kind='bar')
plt.show()'''或者'''
crecreditcard_data['Class'].value_counts()
#0    284315
#1       492
set(creditcard_data["Class"])
#{0, 1}
y = creditcard_data["Class"]
sns.countplot(y)

在这里插入图片描述

#0代表正常,1代表欺诈,二者数量严重失衡,极度不平衡,根本不在一个数量级上;
# 查看二者的描述性统计,与时间的序列分布关系
# Time是指Number of seconds elapsed between this transaction and the first transaction in the dataset
print('Normal')
print(crecreditcard_data.Time[crecreditcard_data.Class == 0].describe())
print('-'*25)
print('Fraud')
print(crecreditcard_data.Time[crecreditcard_data.Class == 1].describe())
#Normal
#count    284315.000000
#mean      94838.202258
#std       47484.015786
#min           0.000000
#25%       54230.000000
#50%       84711.000000
#75%      139333.000000
#max      172792.000000
#Name: Time, dtype: float64
#-------------------------
#Fraud
#count       492.000000
#mean      80746.806911
#std       47835.365138
#min         406.000000
#25%       41241.500000
#50%       75568.500000
#75%      128483.000000
#max      170348.000000
#Name: Time, dtype: float64plt.rcParams["font.sans-serif"] = ["Heiti TC"]
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题
sns.set(font='Heiti TC',font_scale=1)  # 解决Seaborn中文显示问题并调整字体大小f,(ax1,ax2)=plt.subplots(2,1,sharex=True,figsize=(12,6))
bins=50
ax1.hist(crecreditcard_data.Time[crecreditcard_data.Class == 1],bins=bins)
ax1.set_title('欺诈(Fraud))',fontsize=22)
ax1.set_ylabel('交易量',fontsize=15)ax2.hist(crecreditcard_data.Time[crecreditcard_data.Class == 0],bins=bins)
ax2.set_title('正常(Normal',fontsize=22)plt.xlabel('时间(单位:秒)',fontsize=15)
plt.xticks(fontsize=15)plt.ylabel('交易量',fontsize=15)
# plt.yticks(fontsize=22)
plt.show()"""或者"""
plt.figure(figsize = (16,14), dpi=100)
plt.subplot(211)
sns.histplot(crecreditcard_data["Time"][crecreditcard_data["Class"]==1],bins=50)
plt.title("欺诈",fontsize = 22)
plt.xlabel('时间(单位:秒)',fontsize=15)
plt.ylabel("交易量",fontsize=15)
plt.xticks(fontsize = 15)plt.subplot(212)
sns.histplot(crecreditcard_data["Time"][crecreditcard_data["Class"]==0],bins=50)
plt.title("正常",fontsize = 22)
plt.xlabel('时间(单位:秒)',fontsize=15)
plt.ylabel("交易量",fontsize=15)
plt.xticks(fontsize = 15)
"""或者"""
f,(ax1,ax2)=plt.subplots(2,1,sharex = True,figsize = (16,8))
ax1.hist(crecreditcard_data["Time"][crecreditcard_data["Class"]==1],bins=50)
ax1.set_title("欺诈",fontsize=22)
ax1.set_ylabel("交易量",fontsize=15)ax2.hist(crecreditcard_data["Time"][crecreditcard_data["Class"]==0],bins=50)
ax2.set_title("正常",fontsize=22)
ax2.set_ylabel("交易量",fontsize=15)plt.xticks(fontsize=20)
plt.xlabel('时间(单位:秒)',fontsize=15)
'''或者''' #ax[0,0] ax[0,1]
f,ax=plt.subplots(2,1,sharex = True,figsize = (16,8))
ax[0].hist(crecreditcard_data["Time"][crecreditcard_data["Class"]==1],bins=50)
ax[0].set_title("欺诈",fontsize=22)
ax[0].set_ylabel("交易量",fontsize=15)ax[1].hist(crecreditcard_data["Time"][crecreditcard_data["Class"]==0],bins=50)
ax[1].set_title("正常",fontsize=22)
ax[1].set_ylabel("交易量",fontsize=15)plt.xticks(fontsize=20)
plt.xlabel('时间(单位:秒)',fontsize=15)

在这里插入图片描述
欺诈与金额Amount的关系和分布情况

print('欺诈')
print(crecreditcard_data.Amount[crecreditcard_data.Class ==1].describe())
print('-'*25)
print('正常交易')
print(crecreditcard_data.Amount[crecreditcard_data.Class==0].describe())
#欺诈
#count     492.000000
#mean      122.211321
#std       256.683288
#min         0.000000
#25%         1.000000
#50%         9.250000
375%       105.890000
#max      2125.870000
#Name: Amount, dtype: float64
#-------------------------
#正常交易
#count    284315.000000
#mean         88.291022
#std         250.105092
#min           0.000000
#25%           5.650000
#50%          22.000000
#75%          77.050000
#max       25691.160000
#Name: Amount, dtype: float64f,(ax1,ax2)=plt.subplots(2,1,sharex=True,figsize=(12,6))
bins=30
ax1.hist(crecreditcard_data.Amount[crecreditcard_data.Class == 1],bins=bins)
ax1.set_title('欺诈(Fraud)',fontsize=22)
ax1.set_ylabel('交易量',fontsize=15)ax2.hist(crecreditcard_data.Amount[crecreditcard_data.Class == 0],bins=bins)
ax2.set_title('正常(Normal)',fontsize=22)
ax2.set_ylabel("交易量",fontsize=15)
ax2.set_yscale('log')plt.xlabel('金额($)',fontsize=15)
plt.xticks(fontsize=15)

在这里插入图片描述

查看各个自变量(V1 ~V29)与因变量的关系
看看各个变量与正常、欺诈之间是否存在联系,为了更直观展示,通过distplot图来逐个判断,如下:

features=[x for x in crecreditcard_data.columns if x not in ['Time','Amount','Class']]
plt.figure(figsize=(12,28*4))
gs =gridspec.GridSpec(28,1)import warnings
warnings.filterwarnings('ignore')
for i,cn in enumerate(crecreditcard_data[features]):ax=plt.subplot(gs[i])sns.distplot(crecreditcard_data[cn][crecreditcard_data.Class==1],bins=50,color='red')sns.distplot(crecreditcard_data[cn][crecreditcard_data.Class==0],bins=50,color='green')ax.set_xlabel('')ax.set_title('直方图:'+str(cn))
plt.savefig('各个变量与class的关系.png',transparent=False,bbox_inches='tight') #去除空白
plt.show()'''或者'''
features=[x for x in crecreditcard_data.columns if x not in ['Time','Amount','Class']]
plt.figure(figsize=(12,28*4))
gs =gridspec.GridSpec(28,1)import warnings
warnings.filterwarnings('ignore')for i,cn in enumerate(features):plt.subplot(gs[i])sns.distplot(crecreditcard_data[cn][crecreditcard_data.Class==1],bins=50,color='red')sns.distplot(crecreditcard_data[cn][crecreditcard_data.Class==0],bins=50,color='green')plt.xlabel('')plt.title('直方图:'+ str(cn))plt.savefig('各个变量与class的关系.png',transparent=False,bbox_inches='tight') #去除空白
plt.show()

在这里插入图片描述

建模并分析

本部分将应用逻辑回归、随机森林建模分析,分别展开如下:

# 先把数据分为欺诈组和正常组,然后按比例生产训练和测试数据集
# 分组
Fraud=crecreditcard_data[crecreditcard_data.Class == 1]
Normal=crecreditcard_data[crecreditcard_data.Class == 0]# 训练特征集
x_train=Fraud.sample(frac=0.7)
x_train=pd.concat([x_train,Normal.sample(frac=0.7)],axis=0)
# 测试特征集
x_test=crecreditcard_data.loc[~crecreditcard_data.index.isin(x_train.index)]# 标签集
y_train=x_train.Class
y_test=x_test.Class# 去掉特征集里的标签和时间列
x_train=x_train.drop(['Class','Time'],axis=1)
x_test=x_test.drop(['Class','Time'],axis=1)
# 查看数据结构
print(x_train.shape,y_train.shape,'\n',x_test.shape,y_test.shape)
#(199364, 29) (199364,) 
# (85443, 29) (85443,)x_train.columns
#Index(['V1', 'V2', 'V3', 'V4', 'V5', 'V6', 'V7', 'V8', 'V9', 'V10', 'V11',
#       'V12', 'V13', 'V14', 'V15', 'V16', 'V17', 'V18', 'V19', 'V20', 'V21',
#       'V22', 'V23', 'V24', 'V25', 'V26', 'V27', 'V28', 'Amount'],
#      dtype='object')

6.1 逻辑回归方法

from sklearn import metrics
import scipy.optimize as op
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import KFold,cross_val_score
from sklearn.metrics import (precision_recall_curve,auc,roc_auc_score,roc_curve,recall_score,classification_report)lrmodel = LogisticRegression(penalty='l2')
lrmodel.fit(x_train, y_train)#查看模型
print('lrmodel')
print(lrmodel)
#lrmodel
#LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
#          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
#          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
#          verbose=0, warm_start=False)#查看混淆矩阵
ypred_lr=lrmodel.predict(x_test)
print('confusion_matrix')
print(metrics.confusion_matrix(y_test,ypred_lr))
#confusion_matrix
#[[85279    16]
# [   63    85]]#查看分类报告
print('classification_report')
print(metrics.classification_report(y_test,ypred_lr))
#classification_report
#              precision    recall  f1-score   support
#
#           0       1.00      1.00      1.00     85295
#           1       0.84      0.57      0.68       148
#
#    accuracy  
#   macro avg       0.92      0.79      0.84     85443
#weighted avg       1.00      1.00      1.00     85443#查看预测精度与决策覆盖面
print('Accuracy:%f'%(metrics.accuracy_score(y_test,ypred_lr)))
#Accuracy:0.999075
#绘制roc曲线
fpr_Nb, tpr_Nb, _ = roc_curve(y_test, lrmodel.predict_proba(x_test)[:,1])
plt.figure(figsize=(10,8))
plt.plot(fpr_Nb, tpr_Nb)

在这里插入图片描述

#auc():计算ROC曲线下的面积.即图中的area
#roc_auc_score():计算AUC的值,即输出的AUC
auc(fpr_Nb, tpr_Nb)
#0.941179816313177
print('AUC:%f'%(metrics.roc_auc_score(y_test,ypred_lr)))
#AUC:0.841111
print('Area under the curve:%f'%(metrics.roc_auc_score(y_test,lrmodel.predict_proba(x_test)[:,1])))
#Area under the curve:0.941180

6.2 随机森林模型

from sklearn.ensemble import RandomForestClassifier
rfmodel=RandomForestClassifier()
rfmodel.fit(x_train,y_train)#查看模型
print('rfmodel')
print(rfmodel)
#rfmodel
#RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
#           max_depth=None, max_features='auto', max_leaf_nodes=None,
#            min_impurity_decrease=0.0, min_impurity_split=None,
#            min_samples_leaf=1, min_samples_split=2,
#            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,
#            oob_score=False, random_state=None, verbose=0,
#            warm_start=False)#查看混淆矩阵
ypred_rf=rfmodel.predict(x_test)
print('confusion_matrix')
print(metrics.confusion_matrix(y_test,ypred_rf))
#rfmodel
#confusion_matrix
#[[85288     7]
# [   35   113]]
#查看分类报告
print('classification_report')
print(metrics.classification_report(y_test,ypred_rf))
#classification_report
#              precision    recall  f1-score   support
#
#           0       1.00      1.00      1.00     85295
#           1       0.94      0.76      0.84       148
#
#    accuracy                           1.00     85443
#   macro avg       0.97      0.88      0.92     85443
#weighted avg       1.00      1.00      1.00     85443
#查看预测精度与决策覆盖面
print('Accuracy:%f'%(metrics.accuracy_score(y_test,ypred_rf)))
#Accuracy:0.999508
fpr_Nb, tpr_Nb, _ = roc_curve(y_test, rfmodel.predict_proba(x_test)[:,1])
plt.figure(figsize=(10,8))
plt.plot(fpr_Nb, tpr_Nb)

在这里插入图片描述

#auc():计算ROC曲线下的面积.即图中的area
#roc_auc_score():计算AUC的值,即输出的AUC
auc(fpr_Nb, tpr_Nb)
#0.9442721049204431
print('AUC:%f'%(metrics.roc_auc_score(y_test,ypred_lr)))
#AUC:0.841111
print('Area under the curve:%f'%(metrics.roc_auc_score(y_test,rfmodel.predict_proba(x_test)[:,1])))
#Area under the curve:0.944272
from sklearn.externals import joblib
# 保存模型
joblib.dump(rfmodel, "./score_card/anti-fraud-rf.model")
# 加载模型
#estimator = joblib.load("my_ridge.pkl")
#['./score_card/anti-fraud-rf.model']

分数转换

一般来说我们通过模型预测得到的概率指需要通过分数转换转化为具体的评分,例如

  1. 芝麻分的分值范围为350~950,分值越高代表信用越好,相应违约率相对较低,较高的芝麻分可以帮助用户获得更高效、更优质的服务。
  2. FICO分的分值范围为300~850,分数越高, 说明客户的信用风险越小。
    而不是直接使用概率值,关于评分卡的转换

我们将客户违约的概率表示为p,则正常的概率为1-p。因此,可以设:
Odds  = p 1 − p \text { Odds }=\frac{p}{1-p}  Odds =1pp
此时,客户违约的概率p可表示为:
p = O d d s 1 + O d d s \mathrm{p}=\frac{O d d s}{1+O d d s} p=1+OddsOdds
评分卡设定的分值刻度可以通过将分值表示为比率对数的线性表达式来定义,即可表示为下式: Score  = A − B l o g ( Odds  ) \text { Score }=\mathrm{A}-\mathrm{Blog}(\text { Odds })  Score =ABlog( Odds )
其中,A和B是常数。式中的负号可以使得违约概率越低,得分越高。通常情况下,这是分值的理想变动方向,即高分值代表低风险,低分值代表高风险。

式中的常数A、B的值可以通过将两个已知或假设的分值带入计算得到。通常情况下,需要设定两个假设:

(1)给某个特定的比率设定特定的预期分值;

(2)确定比率翻番的分数(PDO)(point of double odds)

根据以上的分析,我们首先假设比率为x的特定点的分值为P。则比率为2x的点的分值应该为P-PDO。代入式中,可以得到如下两个等式:
P = A − B log ⁡ ( x ) P − P D O = A − B log ⁡ ( 2 x ) \begin{array}{c} P=A-B \log (x) \\ P-P D O=A-B \log (2 x) \end{array} P=ABlog(x)PPDO=ABlog(2x)
假设我们期望x=(bad/good)=5%时的分值为50分,PDO为10分(即每增加10分bad/good比例就会缩减一半),代入式中求得:

50=A-B*log(0.05)

50-10=A-B*log(0.1)

计算得到:

B=14.43,A=6.78,

评分卡刻度参数A和B确定以后,就可以计算比率和违约概率,以及对应的分值了。

到这里为止就得到了一个评分卡,当然逻辑回归可以进一步根据woe转化成为更细致的评分卡可见下。

如果是gbdt,神经网络系列的算法,只能到这一步就结束了。方法就是计算得到概率然后把概率转化为Odds的值,然后按照上述操作下来即可。无法得到lr的这种标准评分卡:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/33959.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

风控概要和内容安全,反欺诈(营销风控)

1.风控体系草图 2 内容安全 在UGC,PGC和OGC产出的内容(文字,音频,视频,图片)中会产生如下业务 和合规风险: 涉及谩骂、灌水、广告。涉及色情、暴恐、政治内容等。 已知的内容: 聊天信息,课件内容,留言,帖子,弹幕,视频等等 2.1 工程设计 2.2 文本内容安全 文本内容安全主要涉…

最新版Akamai2.0风控分析

1 前言 1.1 说明 本文章中所有内容仅供学习交流&#xff0c;不可用于任何商业用途和非法用途&#xff0c;如有侵权&#xff0c;请联系作者立即删除。 断断续续的搞akamai已经3年多了&#xff0c;从1.42的版本到现在2.0&#xff0c;一步步的看着它长大变强。 今天突然心血来…

大数据风控---身份反欺诈信贷全流程常用指标及策略

前言 反欺诈的本质更多的是校验借款人的身份&#xff0c;也就是证明你就是你&#xff0c;我就是我。反欺诈也有很多金融术语&#xff08;参见&#xff1a;https://zhuanlan.zhihu.com/p/26197949&#xff09;&#xff0c;也便于我们更清楚欺诈风险点。针对信贷业务&#xff0c…

【成为架构师课程系列】怎样进行系统详细架构设计?

前言 如果一个项目的系统架构(包括理论基础)尚未定义,就不应该进行此系统的全面开发。-- Barry Boehm, 《Software Engineering》 如果选择视图的工作没做好,或者以牺牲气体视图为代价,只注重一个视图,就会掩盖问题以及延误解决问题。-- Grady Booch, 《UML用户指南》 从…

C罗老矣,我的程序人生还有多远

☆ 随着12月11号摩洛哥1-0葡萄牙比赛的结束&#xff0c;不仅说明葡萄牙对要结束本届卡塔尔世界杯了&#xff0c;就连C罗此生的世界杯之旅也将画上句号了。 ☆ 37岁的球星本该是人生最璀璨的阶段&#xff0c;但在足球生涯中&#xff0c;这已经是大龄了。不禁让我想到&#xff0c…

推荐一款拥有31.4k Star的后台管理系统!

&#x1f42f; 平台简介 芋道&#xff0c;以开发者为中心&#xff0c;打造中国第一流的快速开发平台&#xff0c;全部开源&#xff0c;个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin &#xff0c;Vue2 版本采用 vue-element-admin管理…

对话GPT-4:关于教育应用、行业发展及技术趋势的 13个问

提示&#xff1a;文章首图是从playgroundai耗时2分钟绘制的8张图片中挑选的。 ChatGPT 发布以来&#xff0c;迅速迭代成为 ChatGPT-4。其能以更加完整的逻辑回答用户的问题。结合近期大热的话题&#xff0c;向它提问了13个问题。问题可以归类成四个篇章&#xff0c;分别是&…

ChatGLM-6B (介绍相关概念、基础环境搭建及部署)

文章目录 前言一、ChatGLM-6B是什么&#xff1f;二、安装虚拟的python环境1.下载2.安装3.设置国内源(危险)4.虚拟环境使用简介 三、部署ChatGLM-6B1. clone代码2. 运行1.创建虚拟环境2.装包2.1 找到合适的pytorch版本2.1 安装依赖2.2 验证pytorch是否为GPU版本 3.运行 四、部署…

小红书最新的内容趋势是什么?

为帮助大家更好地洞察小红书平台的内容创作趋势及品牌营销策略&#xff0c;新红推出10月月度榜单&#xff0c;从内容种草、品牌投放等方面入手&#xff0c;解析月榜数据&#xff0c;为从业者提供参考。 01 博主空降TOP榜 选题引发观众情感共鸣 据10月『创作人气榜』TOP30数据…

新手运营干货整理丨小红书达人合作平台盘点!

导语&#xff1a;每隔一段时间都会有新品牌入驻小红书&#xff0c;开启内容种草营销。对于新入门的运营和品牌方&#xff0c;小红书怎么找达人推广&#xff1f;去哪里找小红书达人合作平台&#xff1f;达人报价是否合理&#xff1f;小红书数据分析在哪里看&#xff1f;别慌&…

小红书变现方式分别有哪些?分享5种变现方式,让你轻松赚米

小红书是一个主打种草的平台&#xff0c;百分之八十以上的用户都是特别优质有消费力的一二线独立女性&#xff0c;不需要任何后期的成本投入&#xff0c;只要你的产品好&#xff0c;内容好&#xff0c;就能轻松带来收入。那么小红书变现方式有哪些呢&#xff1f;分享5种常见变现…

论文降重首选

用到的工具就俩个&#xff0c;chatGPT和deepl翻译配合使用。当然你需要魔法和chatGPT的账号。 chatGTP网址 deepl翻译网址 花了半月自己动手一点一点水的论文查重29&#xff0c;简直无语&#x1f611;&#xff0c;最后利用chatGTP改了2天。根据下载的查重报告看标红的内容。(…

成为一名优秀的程序员

引子    最近最火的莫过于ChatGPT了&#xff0c;在自己体验后就想着如何其他同事也能方便的起起来&#xff0c;毕竟独乐乐不如众乐乐&#xff0c;自己注册又是V-P-N&#xff0c;又是国外手机验证&#xff0c;对于大部分同事来说门槛还是高的。现在也有不少小程序&#xff0c…

【Hologres】实时数仓

Hologres揭秘:深度解析高效率分布式查询引擎-阿里云开发者社区 介绍 xxx实时数仓发展背景介绍 xxx实时数仓1.0从2019年开始搭建&#xff0c;基于Kudu OLAP引擎构建&#xff0c;前期承载业务不多&#xff0c;任务量不大&#xff0c;运行稳定、性能也很高&#xff0c;比较适合前…

GPT接入企微应用 - 让工作快乐起来

引子    最近最火的莫过于ChatGPT了&#xff0c;在自己体验后就想着如何其他同事也能方便的起起来&#xff0c;毕竟独乐乐不如众乐乐&#xff0c;自己注册又是V-P-N&#xff0c;又是国外手机验证&#xff0c;对于大部分同事来说门槛还是高的。现在也有不少小程序&#xff0c…

WorkTool企微机器人接入智能问答

一、前言 最新版的企微机器人已经集成 Chat &#xff0c;无需开发可快速搭建智能对话机器人。 从官方介绍看目前集成版本使用模型为 3.5-turbo。 二、入门 创建 WorkTool 机器人 你可以通过这篇快速入门教程&#xff0c;来快速配置一个自己的企微机器人。 实现的流程如图&…

python写彩票预测软件_python写彩票预测软件

日志介绍 克里普斯在平昌冬奥会上曾在双人项目上取Ι得了与弗里德里希并列第一的佳绩。 二人同在一个运动品牌旗下&#xff0c;因为恩比德即将推出个人专属战靴&#xff0c;所以库里选择了用这样的方式为同事庆祝。 不过湖人整体↟明显还没找回状态&#xff0c;而今天开场他们被…

告别PPT手残党!这6款AI神器,让你秒变PPT王者!

如果你是一个PPT手残党&#xff0c;每每制作PPT总是让你焦头烂额&#xff0c;那么你一定需要这篇幽默拉风的推广文案&#xff01; 我向你保证&#xff0c;这篇文案将帮助你发现6款AI自动生成PPT的神器&#xff0c;让你告别PPT手残党的身份&#xff0c;成为一名PPT王者。 无论…

chatgpt赋能python:Python生成画布:让你的数据更加生动形象

Python生成画布&#xff1a;让你的数据更加生动形象 如果你是一名数据分析师或者数据科学家&#xff0c;想要把你的数据展示得更加生动形象&#xff0c;那么Python生成画布可能是一款你应该了解的工具。 什么是Python生成画布&#xff1f; Python生成画布是指使用Python语言…

chatgpt智能提效职场办公-ppt怎么压缩文件大小

作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 压缩PPT文件大小有以下几种方法&#xff1a; 压缩图片大小&#xff1a;在PPT当中&#xff0c;图片是占用存储空间最大的部分&#xff0…