Kaggle系列-IEEE-CIS Fraud Detection第一名复现

简介: Kaggle系列-IEEE-CIS Fraud Detection第一名复现

赛题背景


想象一下,站在杂货店的收银台,身后排着长队,收银员没有那么安静地宣布您的信用卡被拒绝了。在这一刻,你可能没有想到决定你命运的数据科学。

非常尴尬有木有?当然你肯定有足够的资金为50个最亲密的朋友办一场盛大的纳乔派对,然后你又试了一次,但是还是同样的结果。此时你只能站在另外一边,让收银员为下一个客户服务时,你收到了银行的短信。“如果你真的想花500美元买切达干酪,请按1。”


虽然现在可能很麻烦(而且常常很尴尬),但这种防欺诈系统实际上每年为消费者节省数百万美元。来自ieee计算智能协会(ieee-cis)的研究人员希望在改善客户体验的同时,提升这个数字。有了更高准确度的欺诈检测率,您就可以在没有麻烦的情况下继续使用您的芯片。


ieee-cis在各种人工智能和机器学习领域,包括深层神经网络、模糊系统、演化计算和群智能等等。今天,他们正与世界领先的支付服务公司Vesta Corporation合作,为防欺诈行业寻求最佳解决方案,现在邀请您也加入此次挑战。


在本次竞赛中,您将在一个具有挑战性的大型数据集上对你的机器学习模型进行基准测试。这些数据来自Vesta的真实电子商务交易,并且包含了从设备类型到产品功能的各种特征。您还可以创建新的特征来改善结果。


如果成功,您将提高全球数百万人的欺诈交易警报的有效性,帮助数十万企业减少欺诈损失并增加收入。当然,你也可以为你自己减少误报的麻烦。


致谢:

Vesta公司为这次竞争提供了数据集。Vesta公司是保证电子商务支付解决方案的先驱。维斯塔公司成立于1995年,开创了电信行业无担保卡(CNP)支付交易的先河。此后,Vesta在全球范围内坚定地扩展了数据科学和机器学习能力,巩固了其在保证电子商务支付方面的领先地位。如今,Vesta每年为超过180亿美元的交易提供担保。


Magic Feature


https://www.kaggle.com/cdeotte/xgb-fraud-with-magic-0-9600

# frequency encode
def encode_FE(df1, df2, cols):
    for col in cols:
        df = pd.concat([df1[col], df2[col]])
        vc = df.value_counts(dropna=True, normalize=True).to_dict()
        vc[-1] = -1
        nm = col + "FE"
        df1[nm] = df1[col].map(vc)
        df1[nm] = df1[nm].astype("float32")
        df2[nm] = df2[col].map(vc)
        df2[nm] = df2[nm].astype("float32")
        print(col)
# label encode
def encode_LE(col, train=X_train, test=X_test, verbose=True):
    df_comb = pd.concat([train[col], test[col]], axis=0)
    df_comb, _ = pd.factorize(df_comb[col])
    nm = col
    if df_comb.max() > 32000:
        train[nm] = df_comb[0: len(train)].astype("float32")
        test[nm] = df_comb[len(train):].astype("float32")
    else:
        train[nm] = df_comb[0: len(train)].astype("float16")
        test[nm] = df_comb[len(train):].astype("float16")
    del df_comb
    gc.collect()
    if verbose:
        print(col)
def encode_AG(main_columns, uids, aggregations=["mean"], df_train=X_train, df_test=X_test, fillna=True, usena=False):
    for main_column in main_columns:
        for col in uids:
            for agg_type in aggregations:
                new_column = main_column + "_" + col + "_" + agg_type
                temp_df = pd.concat([df_train[[col, main_column]], df_test[[col, main_column]]])
                if usena:
                    temp_df.loc[temp_df[main_column] == -1, main_column] = np.nan
                #求每个uid下,该col的均值或标准差
                temp_df = temp_df.groupby([col])[main_column].agg([agg_type]).reset_index().rename(
                    columns={agg_type: new_column})
                #将uid设成index
                temp_df.index = list(temp_df[col])
                temp_df = temp_df[new_column].to_dict()
                #temp_df是一个映射字典
                df_train[new_column] = df_train[col].map(temp_df).astype("float32")
                df_test[new_column] = df_test[col].map(temp_df).astype("float32")
                if fillna:
                    df_train[new_column].fillna(-1, inplace=True)
                    df_test[new_column].fillna(-1, inplace=True)
                print(new_column)
# COMBINE FEATURES交叉特征
def encode_CB(col1, col2, df1=X_train, df2=X_test):
    nm = col1 + '_' + col2
    df1[nm] = df1[col1].astype(str) + '_' + df1[col2].astype(str)
    df2[nm] = df2[col1].astype(str) + '_' + df2[col2].astype(str)
    encode_LE(nm, verbose=False)
    print(nm, ', ', end='')
# GROUP AGGREGATION NUNIQUE
def encode_AG2(main_columns, uids, train_df=X_train, test_df=X_test):
    for main_column in main_columns:
        for col in uids:
            comb = pd.concat([train_df[[col] + [main_column]], test_df[[col] + [main_column]]], axis=0)
            mp = comb.groupby(col)[main_column].agg(['nunique'])['nunique'].to_dict()
            train_df[col + '_' + main_column + '_ct'] = train_df[col].map(mp).astype('float32')
            test_df[col + '_' + main_column + '_ct'] = test_df[col].map(mp).astype('float32')
            print(col + '_' + main_column + '_ct, ', end='')


链接:https://zhuanlan.zhihu.com/p/85947569


相关文章
|
8月前
|
机器学习/深度学习 编解码 计算机视觉
【论文速递】CVPR2022-Blind2Unblind:具有可见盲点的自监督图像去噪
【论文速递】CVPR2022-Blind2Unblind:具有可见盲点的自监督图像去噪
|
5月前
|
机器学习/深度学习 数据挖掘
【博士每天一篇文献-综述】Communication dynamics in complex brain networks
本文综述了复杂脑网络中的通信动态,提出了一个将通信动态视为结构连接和功能连接之间必要联系的概念框架,探讨了结构网络的局部和全局拓扑属性如何支持网络通信模式,以及网络拓扑与动态模型之间的相互作用如何提供对大脑信息转换和处理机制的额外洞察。
55 2
【博士每天一篇文献-综述】Communication dynamics in complex brain networks
|
5月前
|
机器学习/深度学习 数据采集 运维
【博士每天一篇文献-综述】2024机器遗忘最新综述之一:A Survey on Machine Unlearning Techniques and New Emerged Privacy Risks
本文综述了机器遗忘技术及其面临的新兴隐私风险,提出了面向数据和模型的分类法,分析了信息窃取和模型破坏攻击手段,探讨了相应的防御策略,并讨论了机器遗忘技术在大型语言模型、联邦学习和异常检测等领域的应用。
74 5
|
5月前
|
算法 数据挖掘
【博士每天一篇文-算法】Community Detection and Classification in Hierarchical Stochastic Blockmodels
本文介绍了2015年Lyzinski V, Tang M, Athreya在马里兰大学的研究,提出了一种在分层随机块模型中进行社区检测和分类的综合方法,适用于社交网络分析和神经科学等领域,并通过模拟数据和真实数据的实验验证了该方法的有效性。
16 2
|
5月前
|
机器学习/深度学习 算法 调度
【博士每天一篇文献-算法】Neurogenesis Dynamics-inspired Spiking Neural Network Training Acceleration
NDSNN(Neurogenesis Dynamics-inspired Spiking Neural Network)是一种受神经发生动态启发的脉冲神经网络训练加速框架,通过动态稀疏性训练和新的丢弃与生长策略,有效减少神经元连接数量,降低训练内存占用并提高效率,同时保持高准确性。
56 3
|
5月前
|
机器学习/深度学习 存储 人工智能
【博士每天一篇文献-综述】Brain-inspired learning in artificial neural networks a review
这篇综述论文探讨了如何将生物学机制整合到人工神经网络中,以提升网络性能,并讨论了这些整合带来的潜在优势和挑战。
51 5
|
5月前
|
机器学习/深度学习 监控 安全
【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey
本文提供了对机器遗忘领域的综合性调查,提出了新的威胁、攻击和防御分类法,深入分析了机器遗忘系统中的安全问题,并探讨了如何利用攻击手段评估遗忘有效性,同时讨论了遗忘作为防御机制的角色以及面临的挑战和未来研究方向。
65 2
|
8月前
|
算法 数据挖掘 芯片
Sentieon | 每周文献-Gene Editing-第二十八期
Sentieon | 每周文献-Gene Editing-第二十八期
45 0
|
8月前
|
编解码 人工智能 定位技术
MERRA (Modern-Era Retrospective analysis for Research and Applications) 是由 NASA 气候数据集
MERRA (Modern-Era Retrospective analysis for Research and Applications) 是由 NASA 气候数据集
94 0
研究者的盆友圈 Research gate
研究者的盆友圈 Research gate
329 0

热门文章

最新文章