作者 | 天元浪子
來源 | CSDN(ID:CSDNnews)
先聲明一下:本文純屬七夕應景娛樂之作。如果有人因為遵循本模型提出的擇偶理論而導致失戀或單身,除了同情,我不能補償更多。
在中國的傳統節日裡,七夕可能是起源最神秘、內涵最深刻的一個了。當然,這不是本文的重點,我們的核心問題是:在七夕這個特有紀念意義的日子,你真的想好了要向TA表白嗎?TA 真的是你唯一正確的選擇嗎?這個婚介模型,也許對你有一些啟發。
我的婚介所生意興隆,無數想找到理想伴侶的單身人士都來光顧。根據顏值、人品、能力、財富等因素,我給每位客戶確定了一個素質指數(Quality Index),簡寫為 qidx。統計發現,qidx 呈現均值 8.0、標準差 0.5 正態分布。
下面是1萬客戶的 qidx 統計分布圖,可以看出絕大多數單身人士的 qidx 位於 7.0~9.0 之間,評價較為負面的和非常優秀的,都屬於少數派。
importnumpy asnp
importmatplotlib.pyplot asplt
singles = np.random.normal(loc= 8.0, scale= 0.5, size= 10000)
plt.hist(singles, bins= 8, histtype= 'step')
plt.show
一般情況下,我的客戶繳費 1 次,將獲得有 10 次選擇機會。我向客戶推薦目標的策略基於「門當戶對」,總是選擇和客戶的 qidx 相適應的異性,具體說就是以客戶的 qidx 為均值,以 0.1 的方差,按照正態分布隨機生成。
通常,客戶有兩種方式從我為他們推薦的目標中做出選擇。第一種是基於傳統的擇偶觀念,具體規則如下:
有 10% 的客戶會對當前的推薦目標一見鍾情,不在意雙方的 qid 是否匹配。
如果當前推薦目標的 qid 比客戶高,但不超過 0.2,客戶選擇當前推薦目標的機率,會隨剩餘選擇機會的減少而增加,大約從 0.35 升至 0.8。
如果當前推薦目標的 qid 比客戶高 0.2 以上,客戶選擇當前推薦目標的機率,會隨剩餘選擇機會的減少而增加,大約從 0.55 升至 1.0。
如果當前推薦目標的 qid 比客戶低,但不超過 0.2,客戶選擇當前推薦目標的機率,會隨剩餘選擇機會的減少而增加,大約從 0.25 升至 0.7。
如果當前推薦目標的 qid 比客戶低 0.2 以上,求偶者選擇當前目標的機率,會隨剩餘選擇機會的減少而增加,大約從 0 升至 0.18。
第二種匹配方式則是基於「麥穗理論」,聽起來很高大上。這裡省略了關於麥穗理論的講解,感興趣的同學可以自行檢索。具體說,就是客戶在前 4 次的推薦中,不做出選擇,只記下其中的最高的 qidx;從第 5 次開始,只要遇到大於或等於前 4 次最高 qidx 的推薦目標,就做出選擇。
下面,我分別用兩種匹配方式為 1 萬名顧客選擇配偶,結果會怎樣呢?
# -*- encoding: utf-8 -*-
import numpy as np
classSingle:
def__init__( self, qidx, times) :
self.times = times # 婚介所提供的匹配次數
self.counter = 0# 當前匹配次數
self.qidx = qidx # 客戶的qidx
self.spouse = None # 匹配成功的配偶的qidx
self.histroy = list # 基於麥穗理論的前times/e次的推薦對象的qidx
defmath_classical( self, spouse) :
self.counter += 1
ifnp.random.random < 0. 1:
self.spouse = spouse
ifspouse - self.qidx >= 0. 2:
ifnp.random.random < 1- 0. 05*( 10- self.counter):
self.spouse = spouse
elif spouse - self.qidx > 0:
ifnp.random.random < 0. 8- 0. 05*( 10- self.counter):
self.spouse = spouse
elif self.qidx - spouse >= 0. 2:
ifnp.random.random < 0. 18- 0. 02*( 10- self.counter):
self.spouse = spouse
elif self.qidx - spouse >= 0:
ifnp.random.random < 0. 7- 0. 05*( 10- self.counter):
self.spouse = spouse
defmatch_technical( self, spouse) :
self.counter += 1
ifself.counter < self.times/np. e:
self.histroy.append(spouse)
elif spouse >= max( self.histroy):
self.spouse = spouse
defmain(math_mode, total= 10000, times= 10) :
# 生成總數為total的客戶,其qids有正態隨機函數生成
singles = [Single(np.random.normal(loc= 8.0, scale= 0. 5), times) fori inrange(total)]
forp insingles:
fori inrange( 10):
ifp.counter < 10andnotp. spouse:
spouse = np.random.normal(loc=p.qidx, scale= 0. 1)
getattr(p, math_mode)(spouse)
matched = np.array([(p.qidx, p.spouse) forp insingles ifp.spouse])
diff = matched[ :, 0] - matched[ :, 1]
print( '----------------------------------')
print( '成功匹配%d人,成功率%0.2f%%'%(matched.shape[0], matched.shape[0]*100/total))
print( '客戶qidx均值%0.2f,配偶均值%0.2f'%(np.sum(matched[:,0])/matched.shape[ 0], np.sum(matched[ :, 1])/matched.shape[ 0]))
print( '匹配方差%0.2f,匹配標準差%0.2f'%(diff.var, diff.std))
if__name_ _== '__main__':
print( '基於傳統方式擇偶的統計結果')
main( 'math_classical')
print( '基於麥穗理論擇偶的統計結果')
main( 'match_technical')
比較兩種方案的匹配成功率、匹配成功的客戶的平均 qids、匹配成功的客戶配偶的平均 qids、客戶和配偶的 qids 的方差等,你會發現,這個結果真的有點意思。
基於傳統方式擇偶的統計結果
----------------------------------
成功匹配10000人,成功率100 .00%
客戶 qidx均值8 .00,配偶均值8 .02
匹配方差0 .01,匹配標準差0 .10
基於麥穗理論擇偶的統計結果
----------------------------------
成功匹配7138人,成功率71 .38%
客戶 qidx均值8 .00,配偶均值8 .11
匹配方差0 .00,匹配標準差0 .07
結論: