首页 > 编程知识 正文

关于用python作信用卡欺诈预测的信息

时间:2023-12-12 16:20:09 阅读:314913 作者:UDYR

本文目录一览:

编写python程序,判断所输入的信用卡号是否合法?

#!/usr/bin/env python# coding: utf-8#def payment(balance, pay, annualInterestRate=.2): monthlyInterestRate = annualInterestRate / 12.0 def _trysolution(monthlypayment): unpaidbalance = balance for mn in xrange(1, 13): unpaidbalance -= monthlypayment unpaidbalance += monthlyInterestRate * unpaidbalance return unpaidbalance python -u "qa.py"#~ 310#~ 440#~ 360#~ 450#~ Exit code: 0 Time: 0.067

用Python编写一个程序,如何判断用户输入的八位信用卡号码是否合法?

信用卡号是否合法的判断规则为:

对给定的8位信用卡号码,如43589795,从最右边数字开始,隔一位取一个数相加,如5+7+8+3=23。 

将卡号中未出现在第一步中的每个数字乘2,然后将相乘的结果的每位数字相加。

例如,对上述例子,未出现在第一步中的数字乘2后分别为(从右至左)18、18、10、8,则将所有数字相加为1+8+1+8+1+0+8=27。 c) 将上述两步得到的数字相加,如果得数个位为0,则输入的信用卡号是有效的。

Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990 年代初设计,作为一门叫做ABC语言的替代品。

Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

发展历史:

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。

Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

如何用Python在10分钟内建立一个预测模型

预测模型的分解过程

我总是集中于投入有质量的时间在建模的初始阶段,比如,假设生成、头脑风暴、讨论或理解可能的结果范围。所有这些活动都有助于我解决问题,并最终让我设计出更强大的商业解决方案。为什么你要在前面花费这段时间,这有充分的理由:

你有足够的时间投入并且你是无经验的(这是有影响的)

你不带有其它数据观点或想法的偏见(我总是建议,在深入研究数据之前做假设生成)

在后面的阶段,你会急于完成该项目而没有能力投入有质量的时间了。

这个阶段需要投入高质量时间,因此我没有提及时间表,不过我建议你把它作为标准的做法。这有助于你建立建立更好地预测模型,在后面的阶段的只需较少的迭代工作。让我们来看看建立第一个模型的剩余阶段的时间表:

数据描述性分析——50%的时间

数据预处理(缺失值和异常值修复)——40%的时间

数据建模——4%的时间

性能预测——6%的时间

让我们一步一步完成每个过程(每一步投入预测的时间):

阶段1:描述性分析/数据探索

在我刚开始成为数据科学家的时候,数据探索占据了我大量的时间。不过,随着时间的推移,我已经把大量的数据操作自动化了。由于数据准备占据建立第一个模型工作量的50%,自动化的好处是显而易见的。

这是我们的第一个基准模型,我们去掉任何特征设计。因此,描述分析所需的时间仅限于了解缺失值和直接可见的大的特征。在我的方法体系中,你将需要2分钟来完成这一步(假设,100000个观测数据集)。

我的第一个模型执行的操作:

确定ID,输入特征和目标特征

确定分类和数值特征

识别缺失值所在列

阶段2:数据预处理(缺失值处理)

有许多方法可以解决这个问题。对于我们的第一个模型,我们将专注于智能和快速技术来建立第一个有效模型。

为缺失值创建假标志:有用,有时缺失值本身就携带了大量的信息。

用均值、中位数或其它简单方法填补缺失值:均值和中位数填补都表现良好,大多数人喜欢用均值填补但是在有偏分布的情况下我建议使用中位数。其它智能的方法与均值和中位数填补类似,使用其它相关特征填补或建立模型。比如,在Titanic生存挑战中,你可以使用乘客名字的称呼,比如:“Mr.”, “Miss.”,”Mrs.”,”Master”,来填补年龄的缺失值,这对模型性能有很好的影响。

填补缺失的分类变量:创建一个新的等级来填补分类变量,让所有的缺失值编码为一个单一值比如,“New_Cat”,或者,你可以看看频率组合,使用高频率的分类变量来填补缺失值。

由于数据处理方法如此简单,你可以只需要3到4分钟来处理数据。

阶段3:数据建模

根据不同的业务问题,我推荐使用GBM或RandomForest技术的任意一种。这两个技术可以极其有效地创建基准解决方案。我已经看到数据科学家通常把这两个方法作为他们的第一个模型同时也作为最后一个模型。这最多用去4到5分钟。

阶段4:性能预测

有各种各样的方法可以验证你的模型性能,我建议你将训练数据集划分为训练集和验证集(理想的比例是70:30)并且在70%的训练数据集上建模。现在,使用30%的验证数据集进行交叉验证并使用评价指标进行性能评估。最后需要1到2分钟执行和记录结果。

本文的目的不是赢得比赛,而是建立我们自己的基准。让我们用python代码来执行上面的步骤,建立你的第一个有较高影响的模型。

让我们开始付诸行动

首先我假设你已经做了所有的假设生成并且你擅长使用python的基本数据科学操作。我用一个数据科学挑战的例子来说明。让我们看一下结构:

步骤1:导入所需的库,读取测试和训练数据集。

#导入pandas、numpy包,导入LabelEncoder、random、RandomForestClassifier、GradientBoostingClassifier函数

import pandas as pd

import numpy as np

fromsklearn.preprocessing import LabelEncoder

import random

fromsklearn.ensemble import RandomForestClassifier

from sklearn.ensembleimport GradientBoostingClassifier

#读取训练、测试数据集

train=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Train.csv')

test=pd.read_csv('C:/Users/AnalyticsVidhya/Desktop/challenge/Test.csv')

#创建训练、测试数据集标志

train='Train'

test='Test'

fullData =pd.concat(,axis=0) #联合训练、测试数据集

步骤2:该框架的第二步并不需要用到python,继续下一步。

步骤3:查看数据集的列名或概要

fullData.columns # 显示所有的列名称

fullData.head(10) #显示数据框的前10条记录

fullData.describe() #你可以使用describe()函数查看数值域的概要

步骤4:确定a)ID变量 b)目标变量 c)分类变量 d)数值变量 e)其他变量。

ID_col =

target_col =

cat_cols =

num_cols= list(set(list(fullData.columns))-set(cat_cols)-set(ID_col)-set(target_col)-set(data_col))

other_col= #为训练、测试数据集设置标识符

步骤5:识别缺失值变量并创建标志

fullData.isnull().any()#返回True或False,True意味着有缺失值而False相反

num_cat_cols = num_cols+cat_cols # 组合数值变量和分类变量

#为有缺失值的变量创建一个新的变量

# 对缺失值标志为1,否则为0

for var in num_cat_cols:

if fullData.isnull().any()=True:

fullData=fullData.isnull()*1

步骤6:填补缺失值

#用均值填补数值缺失值

fullData = fullData.fillna(fullData.mean(),inplace=True)

#用-9999填补分类变量缺失值

fullData = fullData.fillna(value = -9999)

步骤7:创建分类变量的标签编码器,将数据集分割成训练和测试集,进一步,将训练数据集分割成训练集和测试集。

#创建分类特征的标签编码器

for var in cat_cols:

number = LabelEncoder()

fullData = number.fit_transform(fullData.astype('str'))

#目标变量也是分类变量,所以也用标签编码器转换

fullData = number.fit_transform(fullData.astype('str'))

train=fullData='Train']

test=fullData='Test']

train = np.random.uniform(0, 1, len(train)) = .75

Train, Validate = train=True], train=False]

步骤8:将填补和虚假(缺失值标志)变量传递到模型中,我使用随机森林来预测类。

features=list(set(list(fullData.columns))-set(ID_col)-set(target_col)-set(other_col))

x_train = Train.values

y_train = Train.values

x_validate = Validate.values

y_validate = Validate.values

x_test=test.values

random.seed(100)

rf = RandomForestClassifier(n_estimators=1000)

rf.fit(x_train, y_train)

步骤9:检查性能做出预测

status = rf.predict_proba(x_validate)

fpr, tpr, _ = roc_curve(y_validate, status)

roc_auc = auc(fpr, tpr)

print roc_auc

final_status = rf.predict_proba(x_test)

test=final_status

test.to_csv('C:/Users/Analytics Vidhya/Desktop/model_output.csv',columns=)

现在可以提交了!

用Python编写一个程序,判断用户输入的八位信用卡号码是否合法?

如下:

def verify(numbers: str):

"""  

验证8位信用卡号的正确性  

:param numbers: 8位数字组成的字符串  

:return:  

"""

 

assert len(numbers) == 8, "请输入的8位字符串"

 

numbers_list = [int(x) for x in numbers]  # [1, 2, 3, 4, 5, 6, 7, 8]

 

# 从最右边数字开始,隔一位取一个数相加

 

sum1 = sum(numbers_list[::-2])

 

# 每一位乘2

 

time2 = [str(x * 2) for x in numbers_list[-2::-2]]

 

# 每一位相加

 

time2_str = "".join(time2)  # "141062"

 

sum2 = 0

 

for i in time2_str:

     

sum2 += int(i)

 

# 将上述两步得到的值相加

 

sum3 = sum1 + sum2

 

# 如果结果个位数字为0,则输入的信用卡号是有效的

 

if sum3 % 10 == 0:

     

return True

 

else:

     

return False

verify("12345678")

介绍

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python 也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20年来首次将其置于Java、C和JavaScript之上。

使用python+sklearn的决策树方法预测是否有信用风险

import numpy as np11

import pandas as pd11

names=("Balance,Duration,History,Purpose,Credit amount,Savings,Employment,instPercent,sexMarried,Guarantors,Residence duration,Assets,Age,concCredit,Apartment,Credits,Occupation,Dependents,hasPhone,Foreign,lable").split(',')11

data=pd.read_csv("Desktop/sunshengyun/data/german/german.data",sep='s+',names=names)11

data.head()11

Balance

Duration

History

Purpose

Credit amount

Savings

Employment

instPercent

sexMarried

Guarantors

Assets

Age

concCredit

Apartment

Credits

Occupation

Dependents

hasPhone

Foreign

lable

A11 6 A34 A43 1169 A65 A75 4 A93 A101 … A121 67 A143 A152 2 A173 1 A192 A201 1

1

A12 48 A32 A43 5951 A61 A73 2 A92 A101 … A121 22 A143 A152 1 A173 1 A191 A201 2

2

A14 12 A34 A46 2096 A61 A74 2 A93 A101 … A121 49 A143 A152 1 A172 2 A191 A201 1

3

A11 42 A32 A42 7882 A61 A74 2 A93 A103 … A122 45 A143 A153 1 A173 2 A191 A201 1

4

A11 24 A33 A40 4870 A61 A73 3 A93 A101 … A124 53 A143 A153 2 A173 2 A191 A201 2

5 rows × 21 columns

data.Balance.unique()11

array([‘A11’, ‘A12’, ‘A14’, ‘A13’], dtype=object)data.count()11

Balance 1000 Duration 1000 History 1000 Purpose 1000 Credit amount 1000 Savings 1000 Employment 1000 instPercent 1000 sexMarried 1000 Guarantors 1000 Residence duration 1000 Assets 1000 Age 1000 concCredit 1000 Apartment 1000 Credits 1000 Occupation 1000 Dependents 1000 hasPhone 1000 Foreign 1000 lable 1000 dtype: int64#部分变量描述性统计分析

data.describe()1212

Duration

Credit amount

instPercent

Residence duration

Age

Credits

Dependents

lable

count

1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000 1000.000000

mean

20.903000 3271.258000 2.973000 2.845000 35.546000 1.407000 1.155000 1.300000

std

12.058814 2822.736876 1.118715 1.103718 11.375469 0.577654 0.362086 0.458487

min

4.000000 250.000000 1.000000 1.000000 19.000000 1.000000 1.000000 1.000000

25%

12.000000 1365.500000 2.000000 2.000000 27.000000 1.000000 1.000000 1.000000

50%

18.000000 2319.500000 3.000000 3.000000 33.000000 1.000000 1.000000 1.000000

75%

24.000000 3972.250000 4.000000 4.000000 42.000000 2.000000 1.000000 2.000000

max

72.000000 18424.000000 4.000000 4.000000 75.000000 4.000000 2.000000 2.000000

data.Duration.unique()11

array([ 6, 48, 12, 42, 24, 36, 30, 15, 9, 10, 7, 60, 18, 45, 11, 27, 8, 54, 20, 14, 33, 21, 16, 4, 47, 13, 22, 39, 28, 5, 26, 72, 40], dtype=int64)data.History.unique()11

array([‘A34’, ‘A32’, ‘A33’, ‘A30’, ‘A31’], dtype=object)data.groupby('Balance').size().order(ascending=False)11

c:python27libsite-packagesipykernel__main__.py:1: FutureWarning: order is deprecated, use sort_values(…) if __name__ == ‘__main__’: Balance A14 394 A11 274 A12 269 A13 63 dtype: int64data.groupby('Purpose').size().order(ascending=False)11

c:python27libsite-packagesipykernel__main__.py:1: FutureWarning: order is deprecated, use sort_values(…) if __name__ == ‘__main__’: Purpose A43 280 A40 234 A42 181 A41 103 A49 97 A46 50 A45 22 A44 12 A410 12 A48 9 dtype: int64data.groupby('Apartment').size().order(ascending=False)11

c:python27libsite-packagesipykernel__main__.py:1: FutureWarning: order is deprecated, use sort_values(…) if __name__ == ‘__main__’: Apartment A152 713 A151 179 A153 108 dtype: int64import matplotlib.pyplot as plt

%matplotlib inline

data.plot(x='lable', y='Age', kind='scatter',

alpha=0.02, s=50);12341234

![png](output_13_0.png)data.hist('Age', bins=15);11

![png](output_14_0.png)target=data.lable11

features_data=data.drop('lable',axis=1)11

numeric_features = [c for c in features_data if features_data[c].dtype.kind in ('i', 'f')] # 提取数值类型为整数或浮点数的变量11

numeric_features11

[‘Duration’, ‘Credit amount’, ‘instPercent’, ‘Residence duration’, ‘Age’, ‘Credits’, ‘Dependents’]numeric_data = features_data[numeric_features]11

numeric_data.head()11

Duration

Credit amount

instPercent

Residence duration

Age

Credits

Dependents

6 1169 4 4 67 2 1

1

48 5951 2 2 22 1 1

2

12 2096 2 3 49 1 2

3

42 7882 2 4 45 1 2

4

24 4870 3 4 53 2 2

categorical_data = features_data.drop(numeric_features, axis=1)11

categorical_data.head()11

Balance

History

Purpose

Savings

Employment

sexMarried

Guarantors

Assets

concCredit

Apartment

Occupation

hasPhone

Foreign

A11 A34 A43 A65 A75 A93 A101 A121 A143 A152 A173 A192 A201

1

A12 A32 A43 A61 A73 A92 A101 A121 A143 A152 A173 A191 A201

2

A14 A34 A46 A61 A74 A93 A101 A121 A143 A152 A172 A191 A201

3

A11 A32 A42 A61 A74 A93 A103 A122 A143 A153 A173 A191 A201

4

A11 A33 A40 A61 A73 A93 A101 A124 A143 A153 A173 A191 A201

categorical_data_encoded = categorical_data.apply(lambda x: pd.factorize(x)[0]) # pd.factorize即可将分类变量转换为数值表示

# apply运算将转换函数应用到每一个变量维度

categorical_data_encoded.head(5)123123

Balance

History

Purpose

Savings

Employment

sexMarried

Guarantors

Assets

concCredit

Apartment

Occupation

hasPhone

Foreign

0 0 0 0 0 0 0 0 0 0 0 0 0

1

1 1 0 1 1 1 0 0 0 0 0 1 0

2

2 0 1 1 2 0 0 0 0 0 1 1 0

3

0 1 2 1 2 0 1 1 0 1 0 1 0

4

0 2 3 1 1 0 0 2 0 1 0 1 0

features = pd.concat([numeric_data, categorical_data_encoded], axis=1)#进行数据的合并

features.head()

# 此处也可以选用one-hot编码来表示分类变量,相应的程序如下:

# features = pd.get_dummies(features_data)

# features.head()1234512345

Duration

Credit amount

instPercent

Residence duration

Age

Credits

Dependents

Balance

History

Purpose

Savings

Employment

sexMarried

Guarantors

Assets

concCredit

Apartment

Occupation

hasPhone

Foreign

6 1169 4 4 67 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0

1

48 5951 2 2 22 1 1 1 1 0 1 1 1 0 0 0 0 0 1 0

2

12 2096 2 3 49 1 2 2 0 1 1 2 0 0 0 0 0 1 1 0

3

42 7882 2 4 45 1 2 0 1 2 1 2 0 1 1 0 1 0 1 0

4

24 4870 3 4 53 2 2 0 2 3 1 1 0 0 2 0 1 0 1 0

X = features.values.astype(np.float32) # 转换数据类型

y = (target.values == 1).astype(np.int32) # 1:good,2:bad1212

from sklearn.cross_validation import train_test_split # sklearn库中train_test_split函数可实现该划分

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.2, random_state=0) # 参数test_size设置训练集占比

1234512345

from sklearn.tree import DecisionTreeClassifier

from sklearn.cross_validation import cross_val_score

clf = DecisionTreeClassifier(max_depth=8) # 参数max_depth设置树最大深度

# 交叉验证,评价分类器性能,此处选择的评分标准是ROC曲线下的AUC值,对应AUC更大的分类器效果更好

scores = cross_val_score(clf, X_train, y_train, cv=3, scoring='roc_auc')

print("ROC AUC Decision Tree: {:.4f} +/-{:.4f}".format(

np.mean(scores), np.std(scores)))123456789123456789

ROC AUC Decision Tree: 0.6866 +/-0.0105

#利用learning curve,以样本数为横坐标,训练和交叉验证集上的评分为纵坐标,对不同深度的决策树进行对比(判断是否存在过拟合或欠拟合)

from sklearn.learning_curve import learning_curve

def plot_learning_curve(estimator, X, y, ylim=(0, 1.1), cv=3,

n_jobs=1, train_sizes=np.linspace(.1, 1.0, 5),

scoring=None):

plt.title("Learning curves for %s" % type(estimator).__name__)

plt.ylim(*ylim); plt.grid()

plt.xlabel("Training examples")

plt.ylabel("Score")

train_sizes, train_scores, validation_scores = learning_curve(

estimator, X, y, cv=cv, n_jobs=n_jobs, train_sizes=train_sizes,

scoring=scoring)

train_scores_mean = np.mean(train_scores, axis=1)

validation_scores_mean = np.mean(validation_scores, axis=1)

plt.plot(train_sizes, train_scores_mean, 'o-', color="r",

label="Training score")

plt.plot(train_sizes, validation_scores_mean, 'o-', color="g",

label="Cross-validation score")

plt.legend(loc="best")

print("Best validation score: {:.4f}".format(validation_scores_mean[-1]))12345678910111213141516171819202122231234567891011121314151617181920212223

clf = DecisionTreeClassifier(max_depth=None)

plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')

# 可以注意到训练数据和交叉验证数据的得分有很大的差距,意味着可能过度拟合训练数据了123123

Best validation score: 0.6310

clf = DecisionTreeClassifier(max_depth=10)

plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212

Best validation score: 0.6565

clf = DecisionTreeClassifier(max_depth=8)

plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212

Best validation score: 0.6762

clf = DecisionTreeClassifier(max_depth=5)

plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212

Best validation score: 0.7219

clf = DecisionTreeClassifier(max_depth=4)

plot_learning_curve(clf, X_train, y_train, scoring='roc_auc')1212

Best validation score: 0.7226

Python能做什么,能够开发什么项目?

Python是一种计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。

Python是一种解释型脚本语言,可以应用于Web 和 Internet开发、科学计算和统计、人工智能、教育、桌面界面开发、软件开发、后端开发这些领域。

Python的应用

1、系统编程

提供API(Application Programming Interface应用程序编程接口),能方便进行系统维护和管理,Linux下标志性语言之一,是很多系统管理员理想的编程工具。

2、图形处理

有PIL、Tkinter等图形库支持,能方便进行图形处理。

3、数学处理

NumPy扩展提供大量与许多标准数学库的接口。

4、文本处理

python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。

5、数据库编程

程序员可通过遵循Python DB-API(数据库应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据库通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。

6、网络编程

提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。

7、Web编程

应用的开发语言,支持最新的XML技术。

8、多媒体应用

Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。

9、pymo引擎

PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。

10、黑客编程

python有一个hack的库,内置了你熟悉的或不熟悉的函数,但是缺少成就感。

参考资料来源:百度百科—Python

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。