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月前
|
人工智能 自然语言处理 算法
揭秘AI文本:当前主流检测技术与挑战
揭秘AI文本:当前主流检测技术与挑战
1483 115
|
8月前
|
机器学习/深度学习 人工智能 API
破译AI“指纹”:如何识别机器生成内容?
破译AI“指纹”:如何识别机器生成内容?
1165 117
|
关系型数据库 虚拟化 iOS开发
VMware ESXi 8.0U3g macOS Unlocker & OEM BIOS 2.7 ConnectX-3 网卡特殊定制版
VMware ESXi 8.0U3g macOS Unlocker & OEM BIOS 2.7 ConnectX-3 网卡特殊定制版
620 0
|
机器学习/深度学习 人工智能 算法
分位数回归+共形预测:Conformalized Quantile Regression实现更可靠的预测区间
预测不确定性量化在数据驱动决策中至关重要,分位数回归(QR)虽能生成自适应预测区间,但缺乏严格覆盖保证;共形预测(CP)则提供覆盖保证但缺乏强自适应性。Conformalized Quantile Regression (CQR)融合两者优势,通过校准分位数回归模型,生成既适应数据特性又具备统计保证的预测区间。本文深入探讨CQR理论、实现与应用,展示其在医疗、金融等领域提升预测可靠性的潜力,为高风险决策提供更精确和可信的支持。
803 0
分位数回归+共形预测:Conformalized Quantile Regression实现更可靠的预测区间
|
虚拟化 iOS开发 MacOS
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
335 1
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
|
域名解析 网络协议 应用服务中间件
网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
本文将以网络编程入门者视角,言简意赅地为你请清楚localhost和127.0.0.1的关系及区别等。
908 2
网络编程入门如此简单(四):一文搞懂localhost和127.0.0.1
|
XML 前端开发 JavaScript
为什么浏览器不能读取 JSX?
【8月更文挑战第30天】
633 4
|
SQL 数据管理 数据库
文章初学者指南:SQL新建数据库详细步骤与最佳实践
引言:在当今数字化的世界,数据库管理已经成为信息技术领域中不可或缺的一部分。作为广泛使用的数据库管理系统,SQL已经成为数据管理和信息检索的标准语言。本文将详细介绍如何使用SQL新建数据库,包括准备工作、具体步骤和最佳实践,帮助初学者快速上手。一、准备工作在开始新建数据库之前,你需要做好以下准备工作
1320 3

热门文章

最新文章