用多元線性回歸模型擬合專家打分——基于店鋪選址

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分

image.png
image.png

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)
image.png

停車配置、賣場(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
image.png

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')
image.png

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')
image.png

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í)原因。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容