【金融风控】特征评估与筛选详解

内容介绍

  • 掌握单特征分析的衡量指标

  • 知道 IV,PSI等指标含义

  • 知道多特征筛选的常用方法

  • 掌握Boruta,VIF,RFE,L1等特征筛选的使用方法

【理解】单特征分析

什么是好特征

从几个角度衡量:覆盖度,区分度,相关性,稳定性

覆盖度
  • 采集类,授权类,第三方数据在使用前都会分析覆盖度

    • 采集类 :如APP list (Android 手机 90%)

    • 授权类:如爬虫数据(20% 30%覆盖度)GPS (有些产品要求必须授权)

  • 一般会在两个层面上计算覆盖度(覆盖度 = 有数据的用户数/全体用户数)

    • 全体存量客户

    • 全体有信贷标签客户

  • 覆盖度可以衍生两个指标:缺失率,零值率

    • 缺失率:一般就是指在全体有标签用户上的覆盖度

    • 零值率:很多信贷类数据在数据缺失时会补零,所以需要统计零值率

  • 业务越来越成熟,覆盖度可能会越来愈好,可以通过运营策略提升覆盖度

总结:覆盖度 = 非空的样本数/总的样本数。

区分度

区分度是评估一个特征对好坏用户的区分性能的指标。

  • 可以把单特征当做模型,使用AUC, KS来评估特征区分度

  • 在信贷领域,常用Information Value (IV)来评估单特征的区分度

    • Information Value刻画了一个特征对好坏用户分布的区分程度

      • IV值越大,区分程度越大

      • IV值越小,区分程度越小

      • IV值最后ln的部分跟WOE是一样的

      • IV计算举例(数据为了方便计算填充,不代表实际业务)

      婚配goodbadp_goodp_badp_good-p_badln(p_g/p_bad)IV
      未婚403050%37.5%0.1250.28770.036
      已婚304037.5%50%-0.125-0.28770.036
      其他101012.5%12.5%000
      总计8080100%100%--0.072
      • IV<0.02 区分度小 建模时不用 (xgboost,lightGMB 对IV值要求不高) IV [0.02,0.5] 区分度大 可以放到模型里 IV > 0.5 单独取出作为一条规则使用,不参与模型训练

      • 模型中尽可能使用区分度相对较弱的特征,将多个弱特征组合,得到评分卡模型

      • 连续变量的IV值计算,先离散化再求IV,跟分箱结果关联很大(一般分3-5箱)

相关性

对线性回归模型,有一条基本假设是自变量x1,x2,…,xp之间不存在严格的线性关系

  • 先计算特征列之间相关性,把相关性高的列去掉

  • 计算特征列和标签列之间相关性,把相关性低的列去掉

  • 需要对相关系数较大的特征进行筛选,只保留其中对标签区分贡献度最大的特征,即保留IV较大的

  • 皮尔逊相关系数,斯皮尔曼相关系数,肯德尔相关系数

  • 如何选择:

    • 考察两个变量的相关关系,首先得清楚两个变量都是什么类型的

      • 连续型数值变量,无序分类变量、有序分类变量

    • 连续型数值变量,如果数据具有正态性,此时首选Pearson相关系数,如果数据不服从正态分布,此时可选择Spearman和Kendall系数

    • 两个有序分类变量相关关系,可以使用Spearman相关系数

    • 一个分类变量和一个连续数值变量,可以使用kendall相关系数

    • 总结:就适用性来说,kendall > spearman > pearson

  • 如何计算

import pandas as pd
df = pd.DataFrame({'A':[5,91,3],'B':[90,15,66],'C':[93,27,3]})
df.corr() # 皮尔逊
df.corr('spearman')#斯皮尔曼
df.corr('kendall')#肯德尔
  • 可以使用toad库来过滤大量的特征,高缺失率、低iv和高度相关的特征一次性过滤掉

    import toad
    data = pd.read_csv('../data/germancredit.csv')
    data.replace({'good':0,'bad':1},inplace=True)
    data.shape

    显示结果:

    (1000, 21)
    #缺失率大于0.5,IV值小于0.05,相关性大于0.7来进行特征筛选
    selected_data, drop_list= toad.selection.select(data,target = 'creditability', empty = 0.5, iv = 0.05, corr = 0.7, return_drop=True)
    print('保留特征:',selected_data.shape[1],'缺失删除:',len(drop_list['empty']),'低iv删除:',len(drop_list['iv']),'高相关删除:',len(drop_list['corr']))

    显示结果:

    保留特征: 12 缺失删除: 0 低iv删除: 9 高相关删除: 0
稳定性

特征稳定性主要通过计算不同时间段内同一类用户特征的分布的差异来评估

  • 常用的特征稳定性的度量有Population Stability Index (群体稳定性指标,PSI)

  • 当两个时间段的特征分布差异大,则PSI大,模型越不稳定

  • 当两个时间段的特征分布差异小,则PSI小,模型越稳定

  • IV是评估好坏用户分布差异的度量

  • PSI是评估两个时间段特征分布差异的度量

  • 都是评估分布差异的度量,并且公式其实一模一样,只是符号换了而已

总结:

#1.什么是好特征
覆盖度高(缺失率低,零值率低)
区分度高(IV高,单特征AUC 0.6以上)
稳定性强(PSI比较小)
相关性(特征之间彼此相关性不要太大)#2.怎么获得好特征
可以使用toad库来做单特征筛选,从IV,缺失率,相关性三个维度,一次性筛选出复合条件的好特征来

【理解】多特征筛选

  • 当我们构建了大量特征时,接下来的调整就是筛选出合适的特征进行模型训练

  • 过多的特征会导致模型训练变慢,学习所需样本增多,计算特征和存储特征成本变高

  • 常用的特征筛选方法

    • 星座特征

    • Boruta

    • 方差膨胀系数

    • 递归特征消除

    • L1惩罚项

星座特征

  • 星座是大家公认没用的特征,区分度低于星座的特征可以认为是无用特征

    • 把所有特征加上星座特征一起做模型训练

    • 拿到特征的重要度排序

    • 多次训练的重要度排序都低于星座的特征可以剔除

Boruta

  • Boruta算法是一种特征选择方法,使用特征的重要性来选取特征

    • 网址:https://github.com/scikit-learn-contrib/boruta_py

    • 安装:pip install Boruta -i https://pypi.tuna.tsinghua.edu.cn/simple/

  • 原理

    • 创建阴影特征 (shadow feature) : 对每个真实特征R,随机打乱顺序,得到阴影特征矩阵S,拼接到真实特征后面,构成新的特征矩阵N = [R, S]

    • 用新的特征矩阵N作为输入,训练模型,能输出feature_importances_的模型,如RandomForest, lightgbm,xgboost都可以,得到真实特征和阴影特征的feature importances,

    • 取阴影特征feature importance的最大值S_max,真实特征中feature importance小于S_max的,被认为是不重要的特征

    • 删除不重要的特征,重复上述过程,直到满足条件

    • 案例

    import numpy as np
    import pandas as pd 
    import joblib
    from sklearn.ensemble import RandomForestClassifier
    from boruta import BorutaPy
    #加载数据
    pd_data = joblib.load('../data/train_woe.pkl')
    pd_data

    显示结果:

    SK_ID_CURRTARGETAMT_GOODS_PRICEREGION_POPULATION_RELATIVEDAYS_BIRTHDAYS_EMPLOYEDDAYS_REGISTRATIONDAYS_ID_PUBLISHREGION_RATING_CLIENT_W_CITYREG_CITY_NOT_LIVE_CITY...p_NAME_SELLER_INDUSTRY_Connectivityp_NAME_YIELD_GROUP_XNAp_NAME_YIELD_GROUP_highp_NAME_YIELD_GROUP_low_actionp_NAME_YIELD_GROUP_low_normalp_PRODUCT_COMBINATION_Card Streetp_PRODUCT_COMBINATION_Cash Street: highp_PRODUCT_COMBINATION_Cash X-Sell: highp_PRODUCT_COMBINATION_Cash X-Sell: lowp_PRODUCT_COMBINATION_POS industry with interest
    12540624542900.6101180.0164060.3011900.092078-0.0998220.275679-0.020586-0.048048...0.0532570.3838100.0656500.0732900.164891-0.063697-0.028915-0.0336610.083527-0.065841
    81551095100-0.366495-0.410334-0.440745-0.6089580.1647070.193847-0.536494-0.048048...-0.065479-0.090837-0.1327870.073290-0.241145-0.063697-0.028915-0.0336610.083527-0.348529
    15405327854600.0386500.0164060.3011900.3716510.0751690.060654-0.020586-0.048048...-0.065479-0.090837-0.132787-0.316556-0.241145-0.063697-0.028915-0.0336610.083527-0.348529
    3009634486680-0.366495-0.1584460.301190-0.1716010.075169-0.057870-0.020586-0.048048...-0.065479-0.090837-0.132787-0.3165560.164891-0.063697-0.028915-0.0336610.083527-0.348529
    2695464123730-0.366495-0.410334-0.051704-0.171601-0.099822-0.297834-0.536494-0.048048...0.053257-0.0908370.110022-0.1521160.164891-0.063697-0.028915-0.033661-0.2393870.084509
    ..................................................................
    2989944463760-0.0502330.016406-0.440745-0.451249-0.377708-0.297834-0.020586-0.048048...0.053257-0.0408150.1100220.073290-0.241145-0.063697-0.028915-0.0336610.0835270.084509
    2694294122420-0.0502330.016406-0.4407450.2533810.0751690.060654-0.020586-0.048048...-0.065479-0.090837-0.1327870.0732900.164891-0.063697-0.028915-0.0336610.083527-0.348529
    1610002000.2688590.2682750.3011900.253381-0.099822-0.057870-0.0205860.459100...-0.065479-0.0908370.1100220.0732900.164891-0.063697-0.028915-0.0336610.0835270.084509
    9716921280400.0386500.016406-0.440745-0.4512490.075169-0.057870-0.536494-0.048048...-0.065479-0.0908370.1100220.0732900.164891-0.063697-0.028915-0.0336610.0835270.084509
    905812051650-0.050233-0.0432740.3011900.0920780.0751690.060654-0.020586-0.048048...-0.065479-0.090837-0.1327870.0732900.164891-0.063697-0.028915-0.0336610.083527-0.348529

    215257 rows × 79 columns

    #处理数据,去掉id 和 目标值
    pd_x = pd_data.drop(['SK_ID_CURR', 'TARGET'], axis=1)
    x = pd_x.values   # 特征
    y = pd_data['TARGET'].values # 目标
    y = y.ravel() # 将多维数组降为一维

    注意事项:` NOTE BorutaPy accepts numpy arrays only, hence the .values attribute

  • 使用Boruta,选择features

# 先定义一个随机森林分类器
rf = RandomForestClassifier(n_jobs=-1, class_weight='balanced', max_depth=5)
'''
BorutaPy function
estimator : 所使用的分类器,
n_estimators : 分类器数量, 默认值 = 1000,auto是基于数据集自动判定
max_iter : 最大迭代次数, 默认值 = 100
'''
feat_selector = BorutaPy(rf, n_estimators='auto', random_state=1, max_iter=10)
feat_selector.fit(x, y)
  • 展示选择出来的feature

# feat_selector.support_ # 返回特征是否有用,false可以去掉
pd_ft_select = pd.DataFrame({'feature':pd_x.columns.to_list(), "selected": feat_selector.support_})
pd_ft_select#查看哪些列是可以去掉的
pd_ft_select[pd_ft_select['selected']==False]

显示结果:

featureselected
0AMT_GOODS_PRICETrue
1REGION_POPULATION_RELATIVETrue
2DAYS_BIRTHTrue
3DAYS_EMPLOYEDTrue
4DAYS_REGISTRATIONTrue
.........
72p_PRODUCT_COMBINATION_Card StreetTrue
73p_PRODUCT_COMBINATION_Cash Street: highTrue
74p_PRODUCT_COMBINATION_Cash X-Sell: highTrue
75p_PRODUCT_COMBINATION_Cash X-Sell: lowTrue
76p_PRODUCT_COMBINATION_POS industry with interestTrue

77 rows × 2 columns

featureselected
27b_CREDIT_DAY_OVERDUEFalse
33b_AMT_CREDIT_SUM_OVERDUEFalse
37b_CREDIT_TYPE_MicroloanFalse
38b_CREDIT_TYPE_MortgageFalse
42pos_cash_paid_late_12_cntFalse
55p_NAME_CASH_LOAN_PURPOSE_RepairsFalse
60p_CODE_REJECT_REASON_SCOFRFalse

方差膨胀系数(VIF)

  • 方差膨胀系数 Variance inflation factor (VIF)

    • 如果一个特征是其他一组特征的线性组合,则不会在模型中提供额外的信息,可以去掉

    • 评估共线性程度

      \rm{x_i=1+\sum_{k\ne{i}}\beta_{k}x_{k}}
    • VIF计算:

      \rm{VIF=\frac{1}{1-R^2}}
    • R^2^是线性回归中的决定系数,反映了回归方程解释因变量变化的百分比

    • 上面的式子中, R²代表了预测值和真实值拟合的拟合程度,既考虑了预测值与真实值的差异,同时也兼顾了真实值的离散程度

      • R²<0.5 → 弱拟合

      • 0.5 ≤ R² ≤ 0.8 → 中度拟合

      • R² > 0.8 强拟合

      上面的公式中y = 真实值, $\hat{y}$ = 模型预测值, $\bar{y}$ = 真实值的平均值

      注意:理论上 R² < 0 是可能的,但是只出现在模型特别差的情况,因此不予讨论

      当R²越大,拟合的越好,说明x_i这个特征能被其它特征线性表示,当VIF超过某个阈值的时候,可以考虑把这个x_i删除

    • VIF越大说明拟合越好,该特征和其他特征组合共线性越强,就越没有信息量,可以剔除

  • 案例:

    • 加载数据

    import numpy as np
    import pandas as pd 
    import joblib
    #statsmodels是统计学相关的库
    from statsmodels.stats.outliers_influence import variance_inflation_factor
    pd_data = joblib.load('../data/train_woe.pkl')
    #去掉ID和目标值
    pd_x = pd_data.drop(['SK_ID_CURR', 'TARGET'], axis=1)
    • 计算方差膨胀系数

    #定义计算函数
    def checkVIF_new(df):lst_col = df.columns#x = np.matrix(df)x = df.values#这里i传入的是索引,从第0个特征开始,顺序计算所有特征的方差膨胀系数VIF_list = [variance_inflation_factor(x,i) for i in range(x.shape[1])]VIF = pd.DataFrame({'feature':lst_col,"VIF":VIF_list})return VIF
    df_vif = checkVIF_new(pd_x)
    df_vif

显示结果:

featureVIF
0AMT_GOODS_PRICE1.164528
1REGION_POPULATION_RELATIVE1.835830
2DAYS_BIRTH3.278163
3DAYS_EMPLOYED1.658723
4DAYS_REGISTRATION1.177438
.........
73p_PRODUCT_COMBINATION_Cash Street: high2.384278
74p_PRODUCT_COMBINATION_Cash X-Sell: high1.926074
75p_PRODUCT_COMBINATION_Cash X-Sell: low2.102989
76p_PRODUCT_COMBINATION_POS industry with interest2.036221

77 rows × 2 columns

  • 选取方差膨胀系数 > 3的features

df_vif[df_vif['VIF'] > 3]

显示结果:

featureVIF
2DAYS_BIRTH3.278163
11YEARS_BEGINEXPLUATATION_AVG4.536902
12FLOORSMAX_MEDI5.418642
13TOTALAREA_MODE5.211742
16AMT_REQ_CREDIT_BUREAU_YEAR4.172515
18NAME_INCOME_TYPE_Pensioner3.416916
23EMERGENCYSTATE_MODE_No3.836772
27b_CREDIT_DAY_OVERDUEinf
33b_AMT_CREDIT_SUM_OVERDUEinf
35b_CREDIT_TYPE_Car loan3.127171
38b_CREDIT_TYPE_Mortgageinf
65p_NAME_PORTFOLIO_POS3.273039
68p_NAME_YIELD_GROUP_XNA4.237860

总结:VIF越大,说明拟合越好,该特征和其他特征组合共线性越强,建议剔除。

RFE递归特征消除 (Recursive Feature Elimination)

  • 使用排除法的方式训练模型,把模型性能下降最少的那个特征去掉,反复上述训练直到达到指定的特征个数、

    • sklearn.feature_selection.RFE

  • 案例

    • 使用RFE,选择features

    #如下的案例可以快速出结果
    from sklearn.svm import LinearSVC
    from sklearn.datasets import load_iris
    from sklearn.feature_selection import RFE
    X,y = load_iris(return_X_y=True)
    #分类模型,C是正则化参数,用于控制模型复杂度和泛化能力,默认是1.0
    lscv = LinearSVC(C=0.01)
    # n_features_to_select 要选几个特征,  step 一次删掉几个
    selector = RFE(lscv,n_features_to_select=2,step=1)
    selector.fit(X,y)
    # support_ 返回False的可以被删除, 返回True的留下
    selector.support_
    # 获取顺序 序号越大的是优先被删除的
    selector.ranking_

    显示结果:

    array([False,  True,  True, False])

基于L1的特征选择 (L1-based feature selection)

  • 使用L1范数作为惩罚项的线性模型(Linear models)会得到稀疏解:大部分特征对应的系数为0

  • 希望减少特征维度用于其它分类器时,可以通过 feature_selection.SelectFromModel 来选择不为0的系数

案例

from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
iris = load_iris()
X, y = iris.data, iris.target
X.shape

显示结果:

(150, 4)

#Prefer dual=False when n_samples > n_features.(当样本数量比特征数量多时,设置为False即可)
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
X_new.shape

显示结果:

(150, 3)

总结:我们一般不会单独去实现L1特征选择,不过我们在选择线性模型时如果使用L1进行正则化,就相当于已经用L1来帮我们做特征选择了。

【理解】特征监控

内部特征监控

释义:对内部的数据特征进行监控。

  • 前端监控(授信之前):特征稳定性

    • 大多数情况下,随着业务越来越稳定,缺失率应该呈现逐渐降低的趋势

    • 如下表所示,Week3缺失率突然增加到28%,大概率是数据采集或传输过程出问题了

    • PSI,特征维度的PSI如果>0.1可以观察一段时间

特征名称Week 1Week 2Week 3...
缺失率1%2%28%
零值率20%23%18%
PSI-0.020.3
  • 后端监控(放款之后):特征区分度

    • AUC/KS 波动在10%以内

    • KS 如果是线上A卡 0.2是合格的水平

    • IV值的波动稍大可以容忍,和分箱相关,每周数据分布情况可能不同,对IV影响大一些

特征名称Week 1Week 2Week 3...
AUC0.640.660.62
KS22%23%20%
IV0.050.070.04
  • 分箱样本比例

特征名称Week 1Week 2Week 3...
分箱110%20%15%
分箱250%60%75%
分箱340%20%10%
  • 分箱风险区分:要重视每个特征的风险趋势单调性

    • 每一箱 的bad_rate有波动,容忍度相对高一些

    • 高度重视不同箱之间风险趋势发生变化,如分箱1,分箱2,在week2和week3 风险趋势发生了变化

    • 如果风险趋势单调性发生变化,要考虑特征是不是要进行迭代

特征名称Week 1Week 2Week 3...
分箱130%26%20%
分箱210%17%23%
分箱35%7%6%

外部特征评估

释义:对外部(外来的)数据特征进行评估。

  • 数据评估标准

    覆盖度、区分度、稳定性

  • 使用外部数据的时候需要注意

    避免未来信息:使用外部数据的时候,可能出现训练模型的时候效果好,上线之后效果差

    • 取最近一个时间周期的数据

    • 之前3~4个月或者更长时间的数据做验证,看效果是不是越来越差

  • 外部数据覆盖度如何计算

    • 交集用户数 / 内部用户数

    • 需要对内部所有用户调用外部数据?

      • 如果外部数据免费,那么全部调用,但付费的三方数据要在有必要的时候在调用

      • 在计算外部数据覆盖度前,首先应该明确什么客群适合这个第三方数据

      • 内部缺少数据且这个第三方数据能提升区分度,那这个第三方数据才有用

    • 覆盖度 = 交集用户数 / 内部目标客群

  • 避免内部数据泄露

    • 如果需要把数据交给外部公司,让对方匹配一定要将内部信息做Hash处理再给对方匹配

    • 匹配上的是共有的数据,匹配不上的外部无法得知其身份

  • 避免三方公司对结果美化

    • 内部自己调用接口测覆盖度直接调用即可

    • 如果是把样本交给外部公司让对方匹配,一定要加假样本

      • 这样他们只能匹配出结果,但无法得知真实的覆盖度

      • 只有内部公司能区分出真假样本,从而计算出真实覆盖度

      • 如果覆盖度高于真实样本比例,说明结果作假

  • 评分型外部数据

    区分度和稳定性的分析方法同单特征的分析一样

    区分度:AUC, KS, IV, 风险趋势

    稳定性: PSI

  • 内部特征训练的模型效果 vs 内部特征+外部特征训练的模型效果

    • AUC有 2~3个点的提升就很好了

  • 黑名单型外部数据

    • 使用混淆矩阵评估区分度

      外部命中外部未命中
      内部坏TPFN
      内部好FPTN
    • Precision: 外部命中的尽可能多的是内部的坏客户

    • Recall: 内部的坏客户尽可能多的命中外部名单

  • 外部数据是否具有可回溯性无法得知,所以尽可能取最近的样本去测

    早期接入数据后要密切关注线上真实的区分度表现

小结

  • 单特征分析

    • 覆盖度

    • 区分度

    • 相关性

    • 稳定性

  • 多特征筛选

    • 星座

    • Boruta

    • VIF

    • RFE

    • L1

    • 业务

  • 内部特征的监控

    • 前端稳定性

    • 后端区分度

  • 外部特征的评估

    • 评分型数据

    • 名单型数据

    • 保护隐私

    • 未来信息

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode面试经典150题|228.汇总区间

给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按…

new Object到底占用多少内存?

前言 通过 JOL 工具&#xff0c;深入剖析对象头、实例数据以及内存对齐的具体细节&#xff0c;了解 JVM 是如何管理和优化内存的。使用 JOL&#xff0c;验证内存结构&#xff0c;直观地观察 JVM 参数&#xff08;如对象指针压缩、类指针压缩等&#xff09;对对象布局的影响。 …

深入理解接口测试:实用指南与最佳实践5.0(二)

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

基于Java+SpringBoot宠物管理系统

一、作品包含 源码数据库设计文档全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&…

PYNQ 框架 - 中断(INTR)驱动

目录 1. 简介 2. 分析 2.1 Block Design 2.2 AXI Timer 2.2.1 IP 基本信息 2.2.2 IP 地址空间 2.2.3 级联模式 2.2.4 生成/捕获模式 2.3 AXI Interrupt 2.3.1 IP 基本信息 2.3.2 IP 地址空间 2.3.3 相关概念 2.3.4 参数配置 2.3.5 中断确认寄存器 3. PYNQ 代码 …

使用runtime/pprof包进行Go程序性能调优的实战教程

使用runtime/pprof包进行Go程序性能调优的实战教程 引言基本概念什么是runtime/pprof使用场景 安装和设置环境要求导入runtime/pprof包 基本用法创建和启动一个新的profile停止和销毁一个profile CPU Profiling启动CPU profiling停止CPU profiling分析CPU profiling数据 内存Pr…

深度探秘 VGG 网络:从原理到应用的视觉传奇

VGG 网络的原理 一、整体架构 VGG&#xff08;Visual Geometry Group&#xff09;网络是一种深度卷积神经网络&#xff0c;其显著特点是简洁而高效的架构设计。VGG 网络主要由卷积层、池化层和全连接层组成。 卷积层&#xff1a; 如前所述&#xff0c;VGG 大量使用 的小卷积…

为什么我搞量化分析要特别关注行业产业链

因为看了这本书理论书。我都是用现成的理论来传串起来的。每一步都是背后都有现成的理论支持支撑。虽然看着简单&#xff0c;我这个工具策略参考了投资行为心理学。主要是为了我量身定做的。我也是刚刚研究的新手&#xff0c;碰到的很多问题很多人应该也碰到&#xff0c;就把这…

电商数据接口||淘宝|京东商品详情参数对比

淘宝/天猫获得淘宝商品详情 API 返回值说明 item_get-获得淘宝商品详情 taobao.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中…

Spring Security 认证流程,长话简说

一、代码先行 1、设计模式 SpringSecurity 采用的是 责任链 的设计模式&#xff0c;是一堆过滤器链的组合&#xff0c;它有一条很长的过滤器链。 不过我们不需要去仔细了解每一个过滤器的含义和用法,只需要搞定以下几个问题即可&#xff1a;怎么登录、怎么校验账户、认证失败…

HTMLCSS 打造的酷炫菜单选项卡

效果演示 具有视觉吸引力的菜单选项 HTML <div class"card"><ul><li class"iso-pro"><span></span><span></span><span></span><a href""><svgviewBox"0 0 320 512&quo…

【linux】网络基础 ---- 传输层

1. UDP协议 &#xff08;一&#xff09;UDP协议端格式 注意&#xff1a; 16位UDP长度, 表示整个数据报(UDP首部UDP数据)的最大长度16位UDP检验和&#xff0c;能判断是否出现数据丢失等问题如果校验和出错, 就会直接丢弃 UDP报头本质上也是一个结构体&#xff1a; 操作系统内有…

软件包管理

软件安装 软件包管理器 APT&#xff08;Advanced Package Tool&#xff09;&#xff1a; 发行版&#xff1a;主要用于 Debian 及其衍生版&#xff08;如 Ubuntu&#xff09;。 常用命令&#xff1a; apt-get install &#xff1a;安装软件包。 apt-get update&#xff1a;更新…

[项目代码] YOLOv5 铁路工人安全帽安全背心识别 [目标检测]

YOLOv5是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv5具有更高的…

Linux逻辑卷

文章目录 逻辑卷 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月12日11点09分 逻辑卷 LVM逻辑卷管理是Linux环境中对磁盘分区进行管理的一种机制&#xff0c;建立在硬盘和分区之…

【设计模式】创建型设计模式-工厂模式的实现

工厂模式实现 定义例子UML类图理解Java代码实现总结 定义 工厂方法模式定义了一个接口用于创建对象&#xff0c;该模式由子类决定实例化哪个工厂类。该模式把类的实例化推迟到了子类。 例子 通过一个公共的类方法来管理画图对象的创建。 UML类图理解 Java代码实现 定义接口…

Spring Boot实战:编程训练系统开发手册

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理编程训练系统的相关信息成为必然。开发合适…

方案丨车险保单OCR:3秒钟完成保单审核

在涉及车辆交易的各种情况下&#xff0c;记录和管理车险保单信息是一项必不可少的任务。然而&#xff0c;面对数量庞大的电子保单&#xff0c;传统的手工录入方式显得尤为低效——它不仅消耗大量时间&#xff0c;而且容易出现错误&#xff0c;这不仅影响了用户的满意度&#xf…

性能测试|JMeter接口与性能测试项目

前言 在软件开发和运维过程中&#xff0c;接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用&#xff0c;被广泛用于进行各种性能测试&#xff0c;包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)

引言&#xff1a;在我们的日常使用中&#xff0c;MOS就是个纯粹的电子开关&#xff0c;虽然MOS管也有放大作用&#xff0c;但是几乎用不到&#xff0c;只用它的开关作用&#xff0c;一般的电机驱动&#xff0c;开关电源&#xff0c;逆变器等大功率设备&#xff0c;全部使用MOS管…