python信用卡分析数据_Python數據分析------例子1(信用卡欺詐)

该博客通过Python分析信用卡交易数据,展示了如何处理数据不平衡问题。内容包括数据读取、归一化处理、下采样和过采样(如SMOTE算法)以平衡类别,以及预处理步骤如交叉验证,最后提到了模型评估的关键指标——召回率。
摘要由CSDN通过智能技术生成

1、讀取數據

data=read_csv(path)

data.head()#畫圖(查看class即分類的數據條形圖),函數sort_index()是將dataframe按照行索引來排序輸出值

count_classes=pd.value_counts(data['Class'],sort=True).sort_index()

count_classes.plot(kind='bar')

plt.title("*****")

plt.xlable("class")

plt.ylable("Frequency")

2、認識數據

①數據特征的量綱差距(即歸一化/標准化處理)

from sklearn.processing importStanarScaler#將特征'Amount'歸一化成新的特征'normAmount',這里的reshape函數是將dataframe轉化成array,fit_transform的參數需要是數組。

#fit_transform()是將數據fit再transform,主要作用是將數據標准化成均值為0,方差為1的數,范圍在【-1,1】之間。data['normAmount']=StandarScaler().fit_transform(data['Amount'].reshape(-1,1))#將沒有用的數據特征刪除

data=data.drop('Amount','time')

②數據分布不均衡(比方說分類,0-1分類,0的數據遠遠大於1的數據)

處理方式:下采樣、過采樣。

下采樣:將多的數據變得和少的數據一樣少。

過采樣:將少的數據變得和多的數據一樣多。

以下是下采樣:

#下采樣#將dataframe分為X和Y,其中不等於Class屬性的為X,將屬性值Class作為Y

X=data.ix[:,data.columns!='Class']

y=data.ix[:,data.columns=='Class']#少的數據數量確定為number_fraud,也就是隨機采樣的數量。

number_fraud = len(data[data.Class == 1])#少的數據的索引,轉化成array形式,這樣方便多的數據采樣后的索引進行合並。用函數np.concatenate

fraud_indices = np.array(data[data.Class == 1].index)#多的數據索引

normal_indices = data[data.Class ==0].index#random中的choice函數,第一個參數就是要采樣的數據,第二個參數是采樣量,第三個是沒有重復替換的數據

random_normal_indices = np.random.choice(normal_indices, number_records_fraud, replace =False)

random_normal_indices=np.array(random_normal_indices)#合並采樣后的多數據和少的數據的索引

under_sample_indices =np.concatenate([fraud_indices,random_normal_indices])#根據合並后的索引來取數據

under_sample_data =data.iloc[under_sample_indices,:]

X_undersample= under_sample_data.ix[:, under_sample_data.columns != 'Class']

y_undersample= under_sample_data.ix[:, under_sample_data.columns == 'Class']

過采樣:SMOTE算法、ADASYN算法

SMOTE:對於少數類樣本a,隨機選擇一個最近鄰的樣本b,然后從a和b的連線上隨機選取一個點c作為新的少數類樣本。

計算步驟:

(1)對於少數類中每一個樣本x,以歐氏距離為標准計算它到少數類樣本集中所有樣本的距離,得到其k近鄰。

(2)根據樣本不平衡比例設置一個采樣比例以確定采樣倍率N,對於每一個少數類樣本x,從其k近鄰中隨機選擇若干個樣本,假設選擇的近鄰為xn。

(3)對於每一個隨機選出的近鄰xn,分別與原樣本按照如下的公式構建新的樣本。

X(new)=x+rand(0,1)×(^x-x) 【^x為均值】

比如:我要將少數類樣本數量增大5倍,則N=5,選出x的5近鄰,計算它的均值^x,再計算其與x的距離取隨機值。

代碼如下:

#引入不平衡類模塊的上采樣

from imblearn.over_sampling importSMOTE#oversampler=SMOTE(random_state=0)

X,Y=oversampler.fit_sample(X_train,Y_train)

ADASYN:關注的是在那些基於K最近鄰分類器被錯誤分類的原始樣本附近生成新的少數類樣本

③缺失值、異常值

3、預處理

①交叉驗證:切分訓練集合測試集。

from sklearn.cross_validation importtrain_test_split#整個數據集的切分【作為后面預測的時候用的數據】

X_train, X_test, y_train, y_test = train_test_split(X,y,test_size = 0.3, random_state =0)#下采樣數據集的切分

X_train_undersample, X_test_undersample, y_train_undersample, y_test_undersample =train_test_split(X_undersample

,y_undersample

,test_size= 0.3,random_state= 0)

4、模型評估(如用召回率來評估)recall=TP/(TP+FN)

e26455b3885ad030df2f2ab6bdf639b1.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值