參考場景:定價策略

文中涉及的「數據目錄」和「源代碼目錄」見雲盤:pan.baidu.com/s/1slJntR

如何給產品合理地定價,儘可能地提升利潤,是所有企業都很關心的問題。定價最重要的是考慮產品和目標客戶之間的匹配,如果客戶對產品的需求十分剛性,那麼價格應該可以定得偏高一些;反之,則需要考慮客戶的接受能力,採用一個更容易接受的價格。

現在有一個經營車貸業務的企業,希望研究從 2013年1月1日到 2015年6月30日之間的2萬多份車貸申請記錄數據(數據目錄下 car_loan.xlsx),來找到比較合理的貸款利率價格模型,並探求在不影響市場份額的前提下,是否有提升利潤的可能性。

這個例子中的程序可見源代碼目錄下 car.knwf 和 car.py

1、認識數據

先來總覽一下數據中包含的大致信息:

從數據的描述可見,對於車貸的審核以及利率的制定,主要參考了這樣幾方面因素:

  • 產品信息:包括車的原值、車的類型等
  • 借款人信息:包括所在地、年齡、工作、婚姻狀況、性別、資產情況、信用狀況等
  • 貸款信息:包括貸款金額、貸款周期等

2、清洗並探索數據

通過使用 GeoDa 直接用平行坐標圖對數據進行可視化,我們會發現,其中的 Loan_Term 和 Total_Work_Experience 存在明顯離群的數據,比如貸款周期 Loan_Term 中出現了值為 960 個月的數據,相當於 80 年,這顯然是一個錯誤的數據。因此,在後續分析中,首先需要將這些明顯錯誤的數據進行剔除。

另外,我們直接通過 Excel 也能發現其它不少數據的問題,比如將 Requested_Amount 的數據按降序排序,就能發現有幾個數據的取值異常大,應該是數據錄入的時候多輸入了幾個零導致的(按升序排序也能發現小得離譜的數據,可能是少輸入了幾個零導致的):

我們可以通過 KNIME 對這個數據中明顯錯誤的地方進行清理:

然後繼續通過平行坐標圖來了解各個因素對於利率 IRR 的一個影響:

利率 IRR 的分布大致呈下面的一個分布,最多的利率至大致分布在中間部分,約為 14~20 :

貸款人年齡分布大致如下圖所示,可見 28~40 歲左右的人貸款需求最為旺盛:

如果以工作年限來考察,從下圖中可以看到,貸款需求最旺盛的是那些工作不滿 12 年的人:

3、影響利率的關鍵因素

首先,合理地定價需要找到對貸款利率的影響較大的因素,當然,是從已經審核通過並放款的數據中去尋找。因此,我們首先通過 KNIME 將這部分數據提取出來,並進行清洗、整理,大致流程如下:

然後,我們使用 Python 將數據進行訓練,並尋找出對 IRR 影響較大的因素:

# 讀取並處理數據data = pd.read_csv("car_approved.csv")data = data.drop([application_creation_date, Disbursed], axis=1)features = pd.get_dummies(data)target = features.pop(IRR)X = features.valuesy = target.valuesX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 訓練模型features_train = pd.DataFrame(X_train, columns=features.columns)features_test = pd.DataFrame(X_test, columns=features.columns)target_train = pd.DataFrame(y_train)target_test = pd.DataFrame(y_test)dtrain = xgb.DMatrix(features_train, label=target_train)dtest = xgb.DMatrix(features_test, label=target_test)params = { max_depth: 4, eta: 0.1, min_child_weight: 1, gamma: 0, subsample: 1.0, objective: reg:linear, eval_metric: rmse}evals = [(dtrain,train), (dtest,test)]num_boost_round = 1000bst = xgb.train(params, dtrain, num_boost_round, evals, early_stopping_rounds=300)print(bst.best_score, bst.best_iteration, bst.best_ntree_limit)# 特徵重要性plt.figure(figsize=(16, 6))f_importances = pd.Series(bst.get_score()).sort_values(ascending=False) f_importances.plot(kind=bar)plt.show()

可以從模型結果看到,最影響利率的因素有申請的貸款金額、申請人的年齡、銀行資產、車價、信用評分、借款周期、工作年限等,這也和一般常識比較相符:

4、影響是否放貸的因素

在上面的處理過程中可以看到,總共 2萬多個申請中,審核通過並放款的只有 8千多個,剩下都是沒有審核或者不放款的。這裡,我們將申請超過兩個月並且沒有放款的認為是不符合貸款條件的對象,然後對數據進行如下的處理:

這樣,我們的數據就有了一個新的欄位,用來標記貸款申請是否通過。這樣,我們又可以建模尋找哪些因素對放貸與否的影響較大:

# 讀取並處理數據data = pd.read_csv("car_all.csv")data = data.drop([application_creation_date, Disbursed, IRR], axis=1)target = data.pop(approved)features = pd.get_dummies(data)X = features.valuesy = target.valuesX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 訓練模型features_train = pd.DataFrame(X_train, columns=features.columns)features_test = pd.DataFrame(X_test, columns=features.columns)target_train = pd.DataFrame(y_train)target_test = pd.DataFrame(y_test)dtrain = xgb.DMatrix(features_train, label=target_train)dtest = xgb.DMatrix(features_test, label=target_test)params = { max_depth: 4, eta: 0.1, min_child_weight: 1, gamma: 0, subsample: 1.0, objective: binary:logistic, eval_metric: auc}evals = [(dtrain,train), (dtest,test)]num_boost_round = 1000bst = xgb.train(params, dtrain, num_boost_round, evals, early_stopping_rounds=300)print(bst.best_score, bst.best_iteration, bst.best_ntree_limit)# 特徵重要性plt.figure(figsize=(16, 6))f_importances = pd.Series(bst.get_score()).sort_values(ascending=False) f_importances.plot(kind=bar)plt.show()

從結果我們可以看到,影響放貸是否能夠通過的主要因素有申請人的年齡、信用評分、銀行資產、申請貸款的金額、車價、借款周期、工作年限等,和上面影響利率高低的因素是完全一樣的。

5、調整定價的原則

從業務上理解,貸款利率應當決定於貸款需求的剛性程度,如果借款人的貸款意願並不強烈,那麼應當適當降低利率,來鼓勵其貸款,除非利率已經低到沒有利潤可言;而是否放貸則主要決定於風險大小,如果借款人後期違約的風險越大,那麼越傾向於拒絕放貸。

問題是,目前的模型告訴我們,貸款利率和是否放貸的主要決定因素是一樣的,這裡是否存在著不合理?比如,在決定是否放貸的時候,模型的主要目的是判斷這個借款人會產生違約的可能性大小,那麼,車的價值(Cost_Of_Vehicle)、車的零售指導價(Ex_Showroom_Price)等價格因素似乎就不應當在計算貸款風險的模型中佔據如此大的權重。

而決定利率(IRR)則應當主要考慮解決人對於貸款的需求剛性,雖然很難從業務角度判斷這些因素中是否有不太適合的變數,但是,如果我們將審核通過和沒有通過的數據分開,我們可以看到,審核通過的利率分布呈現接近正態的分布(下圖左),而沒有通過數據中利率的分布基本平均(下圖右),兩者區別很大。這意味著,從現有的定價模型角度來看,是否審核通過和貸款利率是有關係的,這也從側面表明現有的定價模型中,貸款需求和貸款風險的判斷產生了較強關聯。

因此,定價模型應當從這些角度著手調整。

另外,從前面我們知道,年齡在 28~40 歲,工作年限在 12年以內的貸款申請人數量眾多,反映了需求的旺盛。但是通過數據我們可以看到,這個細分人群目前的利率分布和總體樣本的分布基本是一致,甚至,低利率的比例還要更高一些:

那麼,適當地考慮提高這部分剛需人群的利率是不是可以基本不影響市場,但是又可以提升利潤?從數據上看有這樣的可能性,但是否可行還需要結合具體業務的情況綜合考慮。

6、練習

這裡有一份各種車型參數和價格的表格(數據目錄下 car_feature_price.csv ),嘗試著從這個數據中分析各種品牌的各個車型目前的定價策略是否合理,如果不合理應當如何調整。


推薦閱讀:

自主品牌都幹了哪些讓消費者願意多花錢的事?

TAG:定價策略 | 市場細分 | 機器學習 |