Elo是巴西最大的支付品牌之一,与商家建立了合作伙伴关系,以便为持卡人提供促销或折扣。但这些促销活动是否适用于消费者或商家?客户是否喜欢他们的体验?在此次竞赛中,将通过揭示客户忠诚度中的信号,开发算法来识别并为消费者提供最相关的促销或折扣机会。
我们先来看一下提供的数据文件:
import os
print(os.listdir("../input"))
data_Dictionary.xlsx :各文件内各列数据的描述文件,有助于我们更好的理解数据信息。
historical_transactions: 每个card_id的消费历史,最多3个月的历史交易,共有2千9百多万条。
new_merchant_transactions:测评期的消费数据,每个card_id在新商店的消费,近2百万条
merchants:商户的信息数据
train:训练集
test: 验证集
sample_submission:提交数据样本
根据历史数据,侧重特征工程处理,预测每个card_id的忠诚度分数
train_data=pd.read_csv('../input/train.csv', sep=',',header=0)
test_data=pd.read_csv('../input/test.csv', sep=',',header=0)
train_data.info()
test_data.info()
从上图可以看出 train set 含有201917个数据样本,test set 含有123623个数据样本。test set 与train set 的区别在于没有target这也此次任务需要预测。
针对每个card_id 有 first_active_month,feature_1, feature_2, feature_3 这类特征,target是每个card_id 的忠诚度分数。
先将historical_transactions 和 new_transactions文件 导入:
history_data=pd.read_csv('../input/historical_transactions.csv', sep=',',header=0)
new_data = pd.read_csv('../input/new_merchant_transactions.csv',sep=',',header=0)
history_data.info()
new_data.info()
从上图可以看出historical_transactions 和 new_transactions文件中各有14维信息,与train和test集的关联点在card_id。
针对train 和test集上的 first_active_month 这一信息,将时间特征提取出来:‘year’,‘month’,‘elapsed_time’,‘quarter’,‘weekofyear’,‘dayofyear’,‘weekend’。
# In[] 先将train 中target这一列提出来
train_target=np.array(train_data['target'])
# In[]
# Convert time as features
for data in [train_data,test_data]:
data.fillna(0)
data['first_active_month'] = pd.to_datetime(data['first_active_month'])
data['year'] = data['first_active_month'].dt.year
data['month'] = data['first_active_month'].dt.month
#first_active_month_max=data['first_active_month'].dt.date.max()
data['elapsed_time'] = (datetime.date(2018, 2, 1) - data['first_active_month'].dt.date).dt.days
data['dayofweek'] = data['first_active_month'].dt.dayofweek
data['weekofyear'] = data['first_active_month'].dt.weekofyear
data['dayofyear'] = data['first_active_month'].dt.dayofyear
data['quarter'] = data['first_active_month'].dt.quarter
#data['is_month_start'] = data['first_active_month'].dt.is_month_start
data['weekend'] = (data.first_active_month.dt.weekday >=5).astype(int)
train_data.info()
test_data.info()
针对 historical_transactions 和 new_transactions文件,
处理’category_2’,'category_3’中的缺省值,并将其以one-hot形式表达,
** data = pd.get_dummies(data, columns=[‘cat2’, ‘cat3’]) **
将’authorized_flag’, 'category_1’中的特征字符Y/N表示,转为0/1表示:
** data[sub_cate] = data[sub_cate].apply(lambda x: 1 if x == ‘Y’ else 0)**
def category_convert(data):
#data.fillna(0)
data['category_2']=data['category_2'].fillna(data['category_2'].mode()[0])
data['category_3']=data['category_3'].fillna(data['category_3'].mode()[0])
data['merchant_id']=data['merchant_id'].fillna("None")
print("There are ",data.isnull().sum().sum(), 'missing data remains in df.')
data['cat2'] = data['category_2']
data['cat3'] = data['category_3']
data = pd.get_dummies(data, columns=['cat2', 'cat3']) #one hot 的形式
for sub_cate in ['authorized_flag', 'category_1']:
data[sub_cate] = data[sub_cate].apply(lambda x: 1 if x == 'Y' else 0)
return data
history_data=category_convert(history_data)
new_data=category_convert(new_data)
# In[]
history_data.info()
new_data.info()
从上图可以看出,数据多了8 columns,‘category_2’ 的值有五类(1,2,3,4,5),将其one-hot 后 产生了5 columns。‘category_3’ 的值有三类(A,B,C),将其one-hot 后 产生了3 columns。此外, 将’authorized_flag’, 'category_1’中的特征字符Y/N表示,转为0/1表示,数据类型由object 变成了int64。
# Code from: Chau Ngoc Huynh - "My first kernel (3.699)" & Mitsuru Fujiwara - "Simple LightGBM without blending
def Feature_Engineering(data):
# devide time
data['purchase_date'] = pd.to_datetime(data['purchase_date'])
data['month_diff'] = ((datetime.datetime.today() - data['purchase_date']).dt.days)//30
data['month_diff'] += data['month_lag']
data['purchase_year'] = data['purchase_date'].dt.year
data['purchase_month'] = data['purchase_date'].dt.month
data['weekofyear'] = data['purchase_date'].dt.weekofyear
data['dayofyear'] = data['purchase_date'].dt.dayofyear
data['dayofweek'] = data['purchase_date'].dt.dayofweek
data['weekend'] = (data.purchase_date.dt.weekday >=5).astype(int)
#data['hour'] = data['purchase_date'].dt.hour
#data['day']=data['purchase_date'].dt.day
data['quarter'] = data['purchase_date'].dt.quarter
data['purchase_amount_new'] = np.round(data['purchase_amount'] / 0.00150265118 + 497.06,8)
#data['duration'] = data['purchase_amount']*data['month_diff']
#data['amount_month_ratio'] = data['purchase_amount']/data['month_diff']
#data['price']=data['purchase_amount']/data['installments']
data['Christmas_Day_2017']=(pd.to_datetime('2017-12-25')-data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
#Mothers Day: May 14 2017
data['Mothers_Day_2017']=(pd.to_datetime('2017-06-04')-data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
data['fathers_day_2017']=(pd.to_datetime('2017-08-13')-data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
data['Children_day_2017']=(pd.to_datetime('2017-10-12')-data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
data['Valentine_Day_2017']=(pd.to_datetime('2017-06-12')-data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
data['Black_Friday_2017']=(pd.to_datetime('2017-11-24') - data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
data['Mothers_Day_2018']=(pd.to_datetime('2018-05-13')-data['purchase_date']).dt.days.apply(lambda x: x if x > 0 and x < 100 else 0)
return data
history_data = Feature_Engineering(history_data)
new_data = Feature_Engineering(new_data)
history_data.info()
new_data.info()
1. 论文信息Unsupervised Abstractive Meeting Summarization with Multi-Sentence Compression and Budgeted Submodular MaximizationACL 20182. 相关工作(本文使用到了以下工作内容)•Multi-Sentence CompressionGraph (MSCG) ...
Android项目提交代码时一般忽略的文件:1、.idea文件夹2、所有的build文件夹3、所有的.iml文件4、local.properties文件。版本3.6之前版本3.6之后发现上图的Ignored Files找不到了,那么如何配置呢?请看下图这种方式添加忽略文件不需要考虑关联SVN或者Git前还是后,都可以立即生效...
目前在数据库领域,比较主流的认证考试包括了Oracle的OCA、OCP和OCM;微软的MCTS和MCITP;另外改用开源的MYSQL认证CMA、CMDEV和CMDBA。DBA在工作中用到的数据库大都来自Oracle、微软、Sybase等几个主流厂商,因此认证考试也都是围绕这几家厂商的技术和产品,这主要取决你目前工作中所使用的数据库平台。那么本文我们就将来看下主流的数据库认证。1.OracleOra...
//去掉重复行DataView dv = table.DefaultView;table = dv.ToTable(true, new string[] { "name", "code" });此时table 就只有name、code无重复的两行了,如果还需要id值则table = dv.ToTable(true, new string[] { "id","name",...
美国著名图书频道Book Pool集结最权威的62位作者评选出了最近10年计算机专业图书中的50强光这62位作者阵营就非常强大,我们熟悉的就有:Francesco Balena(Microsoft.NET框架程序设计,Visual Basic.NET语言描述作者) Bert Bates(Head First Design Patterns作者) Joshua Bloch(Effective Jav
【Tomcat版本】7.0.42【问题描述】Tomcat启动后,访问动态页面后提示“At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs we
点击上方“民工哥技术之路”选择“星标”每天10点为你分享不一样的干货读者福利!多达 2048G 各种资源免费赠送作者:peiyu1988来源:https://www.c...
Java调用C代码执行加法操作java代码: /** * 通过JNI简单进行整形加法操作 * @param a * @param b * @return */ public static native int addInt(int a, int b);.h代码:/* * Class: com_libin_factory_ndk
需安装flex 和bison一般需要更新软件源 root权限 下 apt-get update apt-get upgrade如果出现以下问题,先查看网络是否畅通;ping 192.168.0.1 如果能ping通,再ping www.baidu.com;如果ping不通,可以查看DNS配置添加如下图所示,保存退出;service network rest...
1、mysql版本报错修改mysql版本为8.0.12修改时区set global time_zone='+8:00';//修改全局时区flush privileges;//立即生效2、tomcat依赖问题将这两个依赖给注释掉,问题得以解决3、驱动废弃问题更新application.properties,将spring.datasource.driver-class-name=com.mysql.jbdc.Driver修改spring.datasource
docker container 容器运行的attach和detach模式attach模式docker run nginx类似运行于前台的进程,会占据本地的STDIN和STDOUTdetach模式docker run -d nginx可以用docker container attach id改为attach模式类似于后台运行与容器的交互注意,必须容器状态是running才可以交互docker run -it id(container id) command 当command运行结束之后
乌鸦搜索算法和粒子集群算法Currently enjoying two new albums by two older bands: 目前正在欣赏两个老乐队的两张新专辑: The Black Crowes - Warpaint 黑乌鸦- 战漆 Counting Crows - Saturday Nights & Sunday Mornings 乌鸦计数- 周六晚和周日上午 Cool...