1 項(xiàng)目背景
部門在研究如何給店鋪選址,并找到了現(xiàn)有的應(yīng)用成果。一位同事談到:“如何從他們的邏輯來(lái)輔助我們進(jìn)行研究?”。
起初,本人認(rèn)為無(wú)法求解。隨后,找到一位教統(tǒng)計(jì)學(xué)課程的老師交流,他也認(rèn)為沒法做模型。然而,筆者下意識(shí)認(rèn)為可能有點(diǎn)機(jī)會(huì),因此決定嘗試。
2 項(xiàng)目結(jié)果
理論價(jià)值:當(dāng)特征全部為有序分類變量,標(biāo)簽為連續(xù)性數(shù)值時(shí),依然可以用多元線性回歸模型進(jìn)行擬合。
現(xiàn)實(shí)意義:復(fù)現(xiàn)了現(xiàn)有的應(yīng)用成果,幫助研究人員更有效率地開展研究工作。
3 數(shù)據(jù)介紹與預(yù)覽
數(shù)據(jù)集地址: https://www.kesci.com/mw/dataset/605e344b474ded0015729257/file
競(jìng)爭(zhēng)店品牌(1、2、3、4、5):無(wú)競(jìng)爭(zhēng)店、次要三線品牌、次要二線品牌、次要一線品牌、主要一線品牌
距離(1、2、3、4、5):無(wú)競(jìng)爭(zhēng)店、200米以上、150-200米、100-150米、100米內(nèi)
相對(duì)位置(1、2、3、4、5):無(wú)競(jìng)爭(zhēng)店、對(duì)面、一面、包夾、扇形
營(yíng)業(yè)時(shí)間(1、2、3、4):無(wú)競(jìng)爭(zhēng)店、短時(shí)間、接近本店時(shí)間、長(zhǎng)時(shí)間或24小時(shí)
競(jìng)爭(zhēng)店開業(yè)時(shí)間(1、2、3、4):無(wú)競(jìng)爭(zhēng)店、半年以內(nèi)、半年至一年、一年以上
販煙(1、2):無(wú)煙、有煙
動(dòng)線(1、2、3、4、5):無(wú)競(jìng)爭(zhēng)店、不同動(dòng)線、動(dòng)線相反、動(dòng)線后、動(dòng)線前
停車配置(1、2、3):不可、困難、可以
賣場(chǎng)面積(1、2、3):小型店、中型店、大型店
競(jìng)爭(zhēng)評(píng)估點(diǎn):最高分為100分


4 數(shù)據(jù)預(yù)處理
4.1 導(dǎo)入庫(kù)與數(shù)據(jù)集
import pandas as pd
from sklearn import model_selection,preprocessing
from sklearn.linear_model import LinearRegression
df = pd.read_excel(r'C:\Users\LEGION\Desktop\選址系數(shù).xlsx')
4.2 劃分特征與標(biāo)簽
location_y = df.iloc[:,-1]
location_x = df.loc[:,"競(jìng)爭(zhēng)店品牌":"賣場(chǎng)面積"]
4.3 劃分訓(xùn)練集與測(cè)試集
location_x_train,location_x_test,location_y_train,location_y_test=model_selection.train_test_split(location_x,location_y,test_size=0.3,random_state=42)
5 建立多元線性回歸模型
lr = LinearRegression()# 模型實(shí)例化
lr.fit(location_x_train,location_y_train)#用訓(xùn)練集擬合模型
lr.score(location_x_test,location_y_test)#用測(cè)試集查看R^2
[out]: 0.9985216027033551
意外發(fā)現(xiàn),線性模型的R2高達(dá)0.99。
lr.coef_,lr.intercept_#查看系數(shù)與截距
[out]: (array([-5. , -4. , -2.875, -1. , -1.375, -4. , -3.25 , -5.875, -5.875]), 133.75)
6 實(shí)現(xiàn)更清晰的解釋
6.1 對(duì)特征進(jìn)行命名
df_tempt1=pd.DataFrame(location_x.columns)
df_tempt1.columns=['Features']
6.2 對(duì)系數(shù)進(jìn)行命名
df_tempt2=pd.DataFrame(lr.coef_)
df_tempt2.columns=['Coef']
6.3 將特征與系數(shù)進(jìn)行合并,對(duì)模型做出解釋
df_finally=pd.concat([df_tempt1 ,df_tempt2], axis=1, join='inner')
df_finally.sort_values(by='Coef',ascending=True)

停車配置、賣場(chǎng)面積、競(jìng)爭(zhēng)店品牌對(duì)模型影響相對(duì)較高。
模型解釋:例如,在其他變量不變的情況下,每增加一個(gè)單位量的【停車配置】,分?jǐn)?shù)會(huì)減少6分。其他變量也可以參照這樣的邏輯進(jìn)行解釋。
6.4 還原初始分
已知條件:當(dāng)所有特征特征為1時(shí),競(jìng)爭(zhēng)評(píng)估為100分,用100?(系數(shù)/系數(shù)之和)可以得到大致的初始分?jǐn)?shù)。
df_ini_points = pd.DataFrame(
[x for x in np.array(pd.DataFrame(100*(df_finally["Coef"]/df_finally["Coef"].sum())).T)]
,columns=[x for x in np.array(df_finally.loc[:,"Features"])]
,index = ["初始分"])
df_ini_points

7 模型驗(yàn)證
7.1 傳遞x的測(cè)試集,來(lái)預(yù)測(cè)分?jǐn)?shù)
location_y_pre = pd.Series(lr.predict(location_x_test))
location_y_pre
[out]:
0 100.50
1 44.00
2 92.50
3 67.25
4 75.50
5 87.50
dtype: float64
location_y_test#真實(shí)值
[out]:
0 100
5 44
11 92
1 67
8 74
16 88
Name: 競(jìng)爭(zhēng)評(píng)估, dtype: int64
從這發(fā)現(xiàn),location_y_test的索引值有問(wèn)題,不方便后續(xù)表格合并。
7.2 恢復(fù)location_y_test的索引值
for i in [location_y_test]:
i.index = range(i.shape[0])
df_final_test = pd.concat([location_y_test ,location_y_pre], axis=1, join='inner')
7.3 真實(shí)值與預(yù)測(cè)值的對(duì)比
7.3.1 測(cè)試集的預(yù)測(cè)效果
df_final_test.rename({"競(jìng)爭(zhēng)評(píng)估":"評(píng)分真實(shí)值",0:"評(píng)分預(yù)測(cè)值"}, axis='columns')

7.3.2 總的對(duì)比效果
final_df = pd.concat([df,pd.Series(lr.predict(location_x))], axis=1, join='inner')
final_df.rename({"競(jìng)爭(zhēng)評(píng)估":"競(jìng)爭(zhēng)評(píng)估真實(shí)值",0:"競(jìng)爭(zhēng)評(píng)估預(yù)測(cè)值"}, axis='columns')

8 項(xiàng)目總結(jié)與思考
1.極大程度地幫助同事更有效率地研究前人的應(yīng)用成果。
2.目前僅找到什么樣的一級(jí)指標(biāo)如何影響分?jǐn)?shù),未能找到更加智能的方法去查看二級(jí)指標(biāo),只能通過(guò)手動(dòng)查詢。
3.由于本次擬合模型的準(zhǔn)確率較高,因此沒有采用傳統(tǒng)評(píng)估回歸模型的方式進(jìn)行模型評(píng)估。
4.為何這么少的數(shù)據(jù)集能跑出這么高的分?jǐn)?shù)?一個(gè)解釋是樣本量過(guò)小,另一個(gè)合理的解釋是,這個(gè)app的原模型本身是通過(guò)主觀的專家打分法創(chuàng)建出來(lái)的,是刻意控制下生成而來(lái)的結(jié)果。是一系列封閉數(shù)據(jù),而非開放、動(dòng)態(tài)、有誤差,且具有“時(shí)間”概念的數(shù)據(jù)。
5.在采集數(shù)據(jù)時(shí),應(yīng)該加強(qiáng)對(duì)數(shù)據(jù)分布的謀劃。例如y標(biāo)簽的數(shù)據(jù)采集一組偏態(tài)分布的數(shù)據(jù)集,再做一組近似正太分布的數(shù)據(jù)集,進(jìn)行兩兩之間的模型比較。
6.本人通過(guò)聚類對(duì)標(biāo)簽y進(jìn)行離散化,效果十分好。然而,用決策樹和隨機(jī)森林的分類器進(jìn)行建模,準(zhǔn)確率只有50%,尚不清楚真實(shí)原因。