Git Product home page Git Product logo

crawler's People

Contributors

frankhlchi avatar

Watchers

James Cloos avatar

crawler's Issues

用Python获取银行网站上的存贷款利率表

项目背景

最近在做一个利率市场化咨询的项目,主要是协助银行搭建定价体系,提供定价策略,在充分考虑产品差异、顾客需求差异、时间差异、地点差异等因素基础上制定不同的存贷款定价方法。

在制定定价策略之前, 我们通常会分析客户所处的内外部的环境。外部环境分析可以分成宏观环境分析、行业环境分析等部分。 在行业分析(Industrial Analysis) 部分, 我们会确定客户的存贷款利率价格在业内处于什么样的水平。这就需要去采集各家银行的存贷款利率数据。

然而Wind上没有相关的数据源可供下载。 这就需要不怕脏不怕累的小朋友们去百度搜索各家银行的网站,然后再用肉眼寻找躲在银行主页角落的“存贷款利率”的连接, 点击进入后将存贷款利率录入到Excel中。 这绝对是是对Junior耐心、眼力的一个考验... 这种没有什么附加值、重复性很强的工作,对于新人成长并没有什么帮助。但是怎么才能让这种无聊的工作自动化呢 ?

Life Is Short, Use Python

这时候我们就要引出 简单、易学、功能强大的编程语言 Python了。我就在这里不赘述Python的优点了,只放一个一目了然的编程语言比较图:

需求分析

在这项任务中,我们需要的自动化的过程并不多,只需要遍历各大银行主页,搜索到存贷款页面连接并打印或储存下来即可。 我们当然也可以直接将数据直接也爬取下来存在Excel中, 但因为各家银行网站架构设计各异,有些存贷款利率表甚至只是一张图片,页面分析的过程会比较耗时。所以,我们暂时不将数据爬取转存这项功能放入我们的需求清单中。

爬取过程

首先, 我们先找到一个银行网址导航网站。我选取的是360导航页面 (http://hao.360.cn/yinhanggengduo.html):

并查看源代码:

可以看出, 银行网址都被放入了 a 这个标签中。 我们可以使用第三方库 BeautifulSoup 美丽汤对该标签进行下载。

当然,不只是银行网址被放入了这个标签中,还有其他很多不相关的网站也是被放入了这个标签下。 这时候我们就需要 正则表达式 对于该标签下的链接进行筛选。经过观察, 大部分银行网站的标签名都以“银行”结尾, 所以我们使用

" .银行 "

作为筛选的正则。而在银行页面上,存贷款的利率信息表的标签名,一般都会包含”款利率“这几个字, 所以我们使用:

”款利率. *"

作为寻找存贷款利率链接的正则。

下面是准备阶段的Python代码:
#encoding:utf-8
import urllib2
import re
from bs4 import BeautifulSoup

#建立列表储存url和对应的标签名
url = []
name= []
#建立集合, 将爬取过的页面放入,避免才重复
urlset =set("")
#用于筛选的正则表达式
source = ".银行"
temp = source.decode('utf8')
source2 = "款利率.*"
temp2 = source2.decode('utf8')
#导航网站作为我们爬取的根页面
response = urllib2.urlopen("http://hao.360.cn/yinhanggengduo.html")
html= response.read()
soup = BeautifulSoup(html,'html.parser')
#将满足条件的url和页面名称放入列表中
for tag in soup.find_all(name='a', text=re.compile(temp)):
name.append(tag.string)
url.append(tag.get('href'))

我们在获取好各大银行网站的url后, 我们需要进一步进入银行的存贷款利率信息表页面。但是经过进一步分析,我们发现,第二层的url一般都是短链接:

无法直接使用,所以我们需要将短链接与域名进行拼接:
#域名拼接
url2 = link + tag2.get('href')
而如果第二层链接是可以直接访问的连接,这样拼接会导致访问错误,所以我们将连接转换为String, 通过判断其前四个Char是否为http来判断该连接为长连接还是短链接:
if href[0:4] == 'http':
#长连接,不进行域名拼接
url2 = tag2.get('href')

并在每次拼接后查询该连接是否输出过,如果已经输出过,则通过continue跳过循环。如果没有,则输出后加入urlset集合中:
if url2 in urlset:
continue
else:
urlset.add(url2)

Python输出部分代码:
num = -1
for link in url:
num = num + 1
try:
linkresponse = urllib2.urlopen(link)
htmlpage = linkresponse.read()
pagesoup = BeautifulSoup(htmlpage, 'html.parser')
for tag2 in pagesoup.find_all(name='a', text=re.compile(temp2)):
#得到银行名称
bname = tag2.get_text()
#得到页面名称
href = str(tag2.get('href'))
if href[0:4] == 'http':
#长连接,不进行域名拼接
url2 = tag2.get('href')
if url2 in urlset:
#输出过, 跳出循环
continue
else:
#未输出过,放入集合
urlset.add(url2)
else:
#域名拼接
url2 = link + tag2.get('href')
if url2 in urlset:
continue
else:
urlset.add(url2)
print name[num]+" " + bname +" "+ url2
except:
pass

运行结果

我们在完成代码部分后,运行该部分Python脚本。

查看输出:

可以看出,我们需要的银行存贷款信息页面链接已经打印出来。 做咨询的小朋友们可以直接点击进入记录相关银行的存贷款利率了~

最后,祝大家新年快乐~ 新的一年工作学习顺利~

商业银行如何利用数据挖掘算法进行存贷款定价?

商业银行如何利用数据挖掘算法进行存贷款定价?

**利率市场化进程

2014年11月22日起,央行宣布不再公布整存整取五年期基准利率,拉开了利率市场化的帷幕;到2015年10月23日,央行宣布放开存款利率上限,这标志着利率市场化在**基本完成。到现在为止, 全国各地商业银行对各自利率的调整已经趋于稳定。先来看一组数据:

很明显, 全国的商业银行的利率政策可以分为三个等级区间 (tier)。第一个等级区间是国有五大行和招行,第二个等级区间是股份制银行,第三个等级区间是地方区域性银行。 随着等级区间的递减,对应的存款利率随之上升,五大行和招行维持着行业最低的利率,而区域性银行争相将自家的存款利率维持在超高的水平上,甚至有些区域性银行直接将“一浮到顶”粗放地作为自己的策略。

国外存款定价经验

美国于1970年开始了利率市场化进程, 在1986年基本完成利率市场化,中间用时16年。 美国各大银行也随着利率市场化的推进不断试行新的定价策略。如金额差异化:根据存款金额的大小提供不同的存款利率。以花旗银行在Virginia的活期存款为例,如果存入金额小于10000美元的活期存款,该笔存款只能享受0.01%的利率,而如果存入金额大于1000000美元,则该笔存款可以享受0.1%的高利率水平:

image

Virginia州花旗银行活期存款利率表

image

Virginia州花旗银行活期存款利率柱状图

image
除了金额差异化,花旗银行也在不同州试行利率区域差异化,如最高水平(存款金额大于$1,000,000)的利率, 在州与州之间也存在着差异 (0.08%和0.1%):

image
同样地,在澳洲,也存在着根据存款金额不同,为客户提供不同利率的现象。 下图是麦考瑞银行存款利率的金额差异化:

image

传统定价模型
贷款定价:
基于风险的贷款定价模型是业内最为常用的定价模型。 其核心是基于:

贷款利率 = 成本 + 目标利润率 + 弹性调整

这一公式。其核心概念是计算出资金获取的成本(包括资金成本、运营成本、风险成本等)、保留给客户让利空间 (底线是保证盈亏平衡)、最终赚取预期的利润。

存款定价:
不同于过去的 “一刀切”、“一浮到顶”, 一般是针对存款客户实施差异化的定价策略,如:
根据区域进行差异化定价(考虑不同区域的竞争水平,在不同地域采取差异化的报价)
根据金额进行差异化定价(根据单笔存款金额规模来进行差异化定价)

利用决策树算法进行分群定价

对存款产品进行科学定价,需要银行精细化运营、建立客户360度视图、搜集客户多维度数据;进而量化客群的行为特征、 价格敏感性等,根据包不同客群的特征进行差异化定价。

存款客户分群:

银行客户选择将存款存入银行,或者在银行内是续存,一部分可以归因为银行的利率价格,我们将这种续存行为归因为“价格敏感性”这一维度。

另一部分续存行为是源于其他因素, 如银行拥有良好的客户关系、提供优良的用户体验等。这些因素,我们都可以糅合进“粘性”这一维度。

通过这两个维度,银行将客户分为四个群体:

image

客户分群四象限

分群算法:

影响客户是否续存的因素有很多;在上一部分,我们将这些因素分为了两部分,一部分是价格敏感性,另一部分是剩余因素共同作用下体现出的用户粘性。如何才可以将两者区分开呢?

核心**:(1)用除去价格和价格相关的变量进行建模预测客户续存概率,尽可能利用非价格变量对用户行为进行预测。
(2)根据预测进行分群后, 再引入存款价格变量进行进一步分群。

我们可以通过决策树CART算法,实现第一部分的用户分群。

算法核心: 以基于最小距离的GINI指数估计函数为衡量标准对数据进行递归分类
算法优点: 抽取规则简便且易于理解;面对存在缺失值、变量数多等问题时非常稳健
算法缺点: 要求被选择的属性只能产生两个子节点;类别过多时,错误可能增加的较快
备选变量:

image
(这里不详述停止分裂条件和剪枝部分的具体过程。)

决策树的叶节点,基于已有的身份和行为信息,对用户行为进行了预测。而要进一步测算客户对于利率的敏感性,是基于用户已有的利用决策树分层后的客户群体,进一步测算敏感性。

首先计算在本客群内的续约概率 P1= (续约 | 客群A)。若续约概率较高,则划分为高粘性客群,反之划分为低粘性客群。

再计算客群内调息后续存概率 P2= (续约| 客群A and 调息)若上调息后P2明显大于P1,则说明本客群为对利率敏感客群。若调息后P2与P1差别不大,则为非敏感客群。

通过决策树模型,银行将用户分群后采取差异化定价策略:针对低利率敏感性&客户群提供较低 的存款利率,以降低存款成本;同时,针对高利率敏感性&低粘性的客户群,提供较高的存款利率,提高存款规模、减少客户流失。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.