跳轉到主要內容
工程的博客

檢測數據偏差使用世鵬科技電子和機器學習

機器學習和世鵬科技電子可以告訴我們關於開發人員工資和性別工資差距之間的關係

2019年6月17日 數據科學和毫升

分享這篇文章

StackOverflow年度開發調查總結今年早些時候,他們優雅的(匿名)2019年發表的結果進行分析。他們豐富的視圖到體驗世界各地的軟件開發人員,他們最喜歡的編輯器是什麼?多少年的經驗?製表符或空格嗎?更為關鍵的是,薪水。軟件工程師的薪水很好,有時都令人十分風光。

科技行業也痛苦地意識到,它並不總是履行其所謂的精英的理想。工資不是一個純粹的價值功能,和故事的故事告訴我們,名牌學校等因素後,年齡,種族和性別工資等的結果產生影響。

機器學習可以超過預測的事情嗎?它能解釋工資和如此突出的情況這些因素可能導致支付不受歡迎的差異呢?這個例子將素描如何增強與標準模型世鵬科技電子(夏普利添加劑的解釋)檢測單個實例的預測可能有關,然後深入到具體原因導致這些預測的數據。

模型偏差或數據(大約)偏差?

雖然這個話題經常被視為檢測“偏見”模型,模型隻是一個鏡像的數據訓練。如果模型是“有偏見的”然後得知從數據的曆史事實。模型不是問題本身;他們是一個分析數據的機會偏見的證據。

解釋模型並不新鮮,大多數庫可以評估的相對重要性的輸入模型。這些都是聚合視圖輸入的影響。然而,一些機器學習模型的輸出高度個人的效果:你的貸款批準了嗎?你會得到財政援助嗎?你是一個可疑的旅行者嗎?

的確,StackOverflow提供方便的計算器估計期望薪資,根據其調查。我們隻能推測如何整體精確的預測,但開發人員特別關心的是他或她自己的前景。

正確的問題可能不是,整個數據顯示偏見嗎?相反,數據顯示個人偏見的實例嗎?

評估StackOverflow調查數據

2019年的數據是,謝天謝地,清潔和自由的數據問題。它包含應對85年約88000開發人員的提問。

這個例子隻關注全職開發人員。數據集包含了大量的相關信息,如多年的經驗、教育、角色,和人口統計信息。值得注意的是,這個數據集不包含獎金和股票信息,隻是薪水。

它也有反應對區塊鏈廣泛質疑的態度,飲料buzz,調查本身。這些被排除在外是不可能反映出大概的經驗和技能應該確定補償。同樣,為了簡單起見,它還將開發人員隻關注美國。

數據建模之前需要更多的轉換。幾個問題允許多個反應“生產力作為一名開發人員你最大的挑戰是什麼?”這些單身問題產生多個是的/沒有反應,需要為多個爆發是/否特性。

等多項選擇題“大約有多少人受雇於你工作的公司或組織嗎?”負擔得起的反應一樣“2 - 9員工”。這些實際上是被連續的值,它可能是有用的地圖他們推斷連續值像“2”,這樣模型可能會考慮他們的訂單和相對大小。這個翻譯是不幸的是手動和需要一些判斷。

Apache火花代碼可以完成的附帶的筆記本,感興趣。

模型選擇與Apache火花

與數據更machine-learning-friendly形式,下一步是適合一個回歸模型,預測工資從這些特性。數據集本身,與火花,過濾和轉換後隻有4 mb,包含206特性從12600開發者,可以輕鬆裝入內存DataFrame手表,更不用說一個服務器。

xgboost,一個受歡迎的gradient-boosted樹木包,可以在幾分鍾內模型適合這些數據在同一台計算機上,沒有火花。xgboost提供了許多可調“hyperparameters”影響的質量模型:最大深度,學習速率,正規化,等等。而不是猜測,簡單的標準做法是嚐試很多設置這些值,選擇的組合結果最準確的模型。

幸運的是,這是引發回來的地方。它可以建立數以百計的這些模型在並行和收集的結果。因為數據集很小,它是簡單的廣播到工人,創建一個群組合hyperparameters嚐試,並使用火花應用相同的簡單的運作xgboost本地代碼,可以建立一個模型數據與每個組合。

deftrain_model(參數個數):(learning_rate max_depth reg_alpha reg_lambda,γ,min_child_weight) =參數xgb_regressor = = XGBRegressor(目標“注冊:squarederror”、max_depth = max_depth \learning_rate = learning_rate reg_alpha = reg_alpha reg_lambda = reg_lambda,γ=γ\min_child_weight = min_child_weight n_estimators =3000年、base_score = base_score \importance_type =“total_gain”random_state =0)xgb_model = xgb_regressor.fit (b_X_train。值、b_y_train.value \eval_set = [(b_X_test。價值,b_y_test.value)] \eval_metric =“rmse”early_stopping_rounds =30.)n_estimators =len(xgb_model.evals_result () (“validation_0”][“rmse”])y_pred = xgb_model.predict (b_X_test.value)美= mean_absolute_error (y_pred b_y_test.value)rmse =√mean_squared_error y_pred b_y_test.value))返回(params + (n_estimators),(美、rmse) xgb_model)
              max_depth = np.unique (np.geomspace (3,7num =5,dtype = np.int32)) .tolist ()learning_rate = np.unique (np.around (np.geomspace (0.01,0.1num =5),小數=3).tolist ()reg_alpha = [0)+ np.unique (np.around (np.geomspace (1,50num =5),小數=3).tolist ()reg_lambda = [0)+ np.unique (np.around (np.geomspace (1,50num =5),小數=3).tolist ()γ= np.unique (np.around (np.geomspace (5,20.num =5),小數=3).tolist ()min_child_weight = np.unique (np.geomspace (5,30.num =5,dtype = np.int32)) .tolist ()並行性=128年param_grid =[(選擇(max_depth),選擇(learning_rate),選擇(reg_alpha) \選擇(reg_lambda),選擇(γ),選擇(min_child_weight))_範圍(並行)params_evals_models = sc.parallelize (param_grid,並行性)。地圖(train_model) .collect ()

這將創建一個模型。跟蹤和評估結果,mlflow可以記錄每一個指標和hyperparameters,並查看他們的筆記本的實驗。相比,一個hyperparameter許多運行結果準確性(平均絕對誤差):

MLflow散點圖模型誤差對hyperparameters < br / >

單一模型顯示最低的錯誤感興趣的伸出驗證數據集。它產生了約28000美元的平均絕對誤差平均工資約為119000美元。不可怕,雖然我們應該意識到模型隻能解釋大多數工資的變化。

解釋xgboost模型

雖然模型可以用來預測未來的工資,相反,問題是模型表示數據。什麼功能似乎最重要在準確預測薪水?的xgboost模型本身計算功能重要性的概念:

進口mlflow.sklearnbest_run_id =“…”模型= mlflow.sklearn.load_model (“運行:/+ best_run_id +“/ xgboost”)排序((郵政編碼(模型。feature_importances_, X.columns)), reverse=真正的):6]

排名的重要性因素預測n xgboost機器學習模型。< br / >

多年的專業編碼、組織規模等因素,並使用Windows最“重要”。這很有趣,但很難解釋。值反映了相對的而不是絕對的重要性。也就是說,不是以美元衡量的影響。重要性的定義在這裏(總收益)也針對如何構建決策樹,很難被映射到一個直觀的解釋。重要的特征與薪水,甚至不一定正相關。

更重要的是,這是一個“全球”的觀點多少物質聚合特性。性別和民族等因素不出現在這個列表,直到走得更遠。這並不意味著這些因素仍不明顯。首先,可以關聯特性,或交互。性別等因素可能與其他功能樹選擇相反,這在一定程度上掩蓋了它們的效果。

更有趣的問題與其說是這些因素是否整體——這是可能的,他們的平均效應相對較小,但是,他們是否有一個顯著的影響在某些個案。這些模型的實例告訴我們一些重要的個人的經驗,這些人,經驗是最重要的。

包世鵬科技電子申請Developer-Level解釋

更幸運的是,一組技術理論上聲音模型解釋在個體預測水平出現了過去五年左右。他們是集體”上海apley一個dditive交貨planations”,方便地實現在Python包世鵬科技電子

這個庫給出任何模型,計算模型的“世鵬科技電子價值觀”。這些值很容易解釋的,因為每個值是一個特性對預測的影響,在其單位。世鵬科技電子值1000在這裏的意思是“解釋+預計1000美元的工資”。世鵬科技電子值計算的方式試圖孤立的關聯和互動,。

進口世鵬科技電子講解員= shap.TreeExplainer(模型)shap_values =講解員。shap_values(X, y=y.values)

世鵬科技電子也計算為每一個輸入值,而不是模型作為一個整體,所以這些解釋可以單獨對每個輸入。它還可以估計特征交互作用的影響分別從每個特性的主要影響,為每個預測。

可辯解的AI:發現整體功能的影響

Developer-level解釋可以聚合成的解釋功能的影響工資在整個數據集通過簡單平均絕對值。世鵬科技電子整體的評估最重要的功能是類似的:

根據絕對世鵬科技電子價值評估功能的重要性。< br / >

世鵬科技電子值講述類似的故事。首先,世鵬科技電子能夠量化以美元對工資的影響,從而大大提高了結果的解釋。以上是一個陰謀絕對平均每個特性對預測的影響工資,在開發人員。年的專業編碼經驗仍占主導地位,解釋影響工資的平均近15000美元。

研究性別與世鵬科技電子的價值觀的影響

我們來具體看性別的影響,比賽,和其他因素可能不應該預測本身的工資。這個例子將檢查性別的影響,盡管這不是表明這是唯一或最重要的是,尋找類型的偏見。

性別不是二進製和調查識別反應的“男人”,“女人”,“非二進製、genderqueer或性別一致”以及“反式”分開。(注意,雖然調查還分別記錄關於性的反應,這些都不是考慮。)世鵬科技電子計算的影響預測為每個這些薪水。男性的開發人員(識別僅為男性),性別的影響不僅僅是男性的效果,但不確定是女性,變性人,等等。

世鵬科技電子價值觀讓我們讀出這些效應的總和為開發人員識別的四個類別:

例子世鵬科技電子值解釋性別對預測的影響工資< br / >

而男性開發者的性別解釋關於適度- 230到+ 890美元意味著大約225美元,對女性來說,範圍廣泛,從約4260美元- 690美元的意思是1320美元。變性和非二進製開發者的結果是相似的,盡管稍微不那麼負麵。

在評估這意味著什麼,重要的是要記得數據和模型的局限性:

  • 相關性不代表因果關係;“解釋”工資是預測暗示,但並不能證明,功能直接導致工資會更高或更低
  • 模型不是完全準確的
  • 這隻是1年的數據,隻有從我們的開發人員
  • 這反映了隻有基本工資,沒有獎金或股票,可以更廣泛的變化

使用世鵬科技電子Vizualize特性與性別的交互

世鵬科技電子圖書館提供了有趣的可視化,利用其分離特性的影響交互的能力。例如,上麵的值表明,開發人員確定為男性預計比別人掙薪水略高,但有更多嗎?這樣的依賴圖可以幫助:

使用世鵬科技電子可視化特性與性別< br / >

點是開發人員。開發者在左邊是那些不確定是男,和在正確的,那些做的,主要是那些識別隻有男性。(清晰的點是隨機擴散水平)。y軸是世鵬科技電子價值,或者確定男性或不解釋什麼預測每個開發人員的工資。如上所述,這些不確定男性顯示整體負麵世鵬科技電子的價值觀,而且,因人而異,而其他人總是表明一個小積極世鵬科技電子價值。

後麵的差異是什麼?世鵬科技電子可以選擇第二個大部分的價值變化特性的影響,在這裏,確定為男性。它選擇的答案“我看起來最重要或緊急”問題的“結構化或如何計劃你的工作嗎?”一個mong developers identifying as male, those who answered this way (red points) appear to have slightly higher SHAP values. Among the rest, the effect is more mixed but seems to have generally lower SHAP values.

解釋是留給讀者,但也許:男性感受到自己的權利,在這個意義上的開發人員也享受更高的薪水,而其他開發人員享受這在哪裏與低成本的角色?

探索帶有巨大的性別影響的實例

如何調查開發人員的工資是最負麵影響?正如可以觀察整體性別特征的影響,可以尋找開發人員的性別特征最大影響預測的薪水。這個人是女性,效應是負的。根據這個模型,她預計每年少掙大約4260美元,因為她的性別:

使用Python世鵬科技電子可視化預測一個開發人員的工資的解釋< br / >

預計的薪水,剛剛超過157000美元,實際報道準確的在這種情況下,因為她的工資是150000美元。

三個最積極和消極特點影響預測的工資是她:

  • 有一個大學學位(隻)(+ 18200)
  • 10年專業經驗(+ 9400)
  • 標識為東亞(+ 9100)
  • 每周工作40個小時(- 4000美元)
  • 不確定是男性(- 4250美元)
  • 100 - 499年在中型機構工作的員工(- 9700美元)

給定的大小影響不確定的預期工資男,我們可能會停止在這裏,離線調查這個案子的細節,以便更好地理解這個開發者和周圍的環境是否她的經驗,或工資,或者兩者兼有,需要改變。

解釋交互使用世鵬科技電子值

更多的細節中可用——4260美元。世鵬科技電子可以將這些特性的影響分解成相互作用。確定女性在預測的總效應可以分為確定女性的影響作為工程經理,使用窗口等。

對預測的影響工資由性別因素來解釋本身隻會增加約630美元。相反,世鵬科技電子分配的性別與其他功能的相互作用的影響:

gender_interactions = interaction_values [gender_feature_locs]。總和(軸=0)max_c = np.argmax (gender_interactions)min_c = np.argmin (gender_interactions)打印(X.columns [max_c])打印(gender_interactions [max_c])打印(X.columns [min_c])打印(gender_interactions [min_c])
              DatabaseWorkedWith_PostgreSQL110.64005Ethnicity_East_Asian- - - - - -1372.6714

識別作為女性和使用PostgreSQL影響預測工資稍微積極,而東亞預測也確定薪水更消極。解釋這些值在這個級別的粒度是困難的在這種情況下,但是,這些額外的解釋是可用的。

世鵬科技電子應用與Apache火花

世鵬科技電子值為每一行獨立計算,考慮到模型中,所以這也可以完成與火花。下麵的示例計算並行世鵬科技電子值同樣位於開發人員性別世鵬科技電子超量的價值觀:

X_df=pruned_parsed_df.drop (“ConvertedComp”) .repartition (16)X_columns=X_df.columnsdef add_shap ():rows_pd=pd.DataFrame (、列=X_columns)shap_values=explainer.shap_values (rows_pd。((“被告”),軸下降=1))返回((*([int(rows_pd["被"][我]))+(浮動(f)fshap_values[我]]))範圍(len (shap_values)))shap_df=X_df.rdd.mapPartitions (add_shap) .toDF (X_columns)effects_df=shap_df。\withColumn (“gender_shap坳(“Gender_Woman”)+坳(“Gender_Man”)+坳(“Gender_Non_binary__genderqueer__or_gender_non_conforming”)+坳\(“反式”))選擇(“被”、“gender_shap”)top_effects_df=effects_df.filter (腹肌(坳(“gender_shap”))> =2500年).orderBy (“gender_shap”)

示例表開發者最負麵的性別世鵬科技電子值,計算與火花。

集群世鵬科技電子值

應用火花是有利當有大量的與世鵬科技電子預測評估。考慮到輸出,也可以使用火花集群的結果,例如,角平分線k - means:

彙編程序=VectorAssembler (inputCols=[ccto_review_df。如果c列! =“被申請人”),\outputCol=“特性”)assembled_df=assembler.transform (shap_df) .cache ()clusterer運算=BisectingKMeans () .setFeaturesCol(“特性”).setK (50).setMaxIter (50).setSeed (0)cluster_model=clusterer.fit (assembled_df)transformed_df=cluster_model.transform (assembled_df)。選擇(“被”,“預測”)

集群的總性別世鵬科技電子效應是最負麵的可能承擔一些進一步的調查。世鵬科技電子是什麼值的受訪者在集群?集群的成員是什麼樣子對人口總體開發人員?

min_shap_cluster_df=transformed_df。f我lter("prediction = 5").\加入(effects_df,“被申請人”)。\加入(X_df,“被申請人”)。\選擇(gender_cols) .groupBy (gender_cols)。().orderBy (gender_cols)all_shap_df=X_df.select (gender_cols) .groupBy (gender_cols)。().orderBy (gender_cols)expected_ratio=transformed_df。f我lter("prediction = 5").()/X_df。()顯示器(min_shap_cluster_df.join (all_shap_df=gender_cols)。\withColumn(“比率”(min_shap_cluster_df(“計數”)/all_shap_df["數"])/expected_ratio)。\orderBy(“比例”))

示例表顯示相對流行集群中的性別身份的最負麵的性別世鵬科技電子值。

開發人員識別女性(隻有)表示在這個集群幾乎2.8 x開發者總人口的比率,例如。這並不奇怪因為前麵的分析。這個集群可以進一步調查來評估其他因素這一組特定於導致整體預測工資下降。

結論

這種類型的分析與世鵬科技電子可以運行任何模型,和規模。作為一個分析工具,它偵探模型轉化為數據,表麵單個實例預測表明,他們應該得到更多的考試。世鵬科技電子很容易解釋和收益率的輸出直觀的情節,可以評估個案的業務用戶。

當然,這種分析不僅限於檢查問題性別、年齡或種族偏見。更直截了當的是,它可以應用到客戶流失模型。,這個問題不僅僅是“這客戶流失嗎?”,但“為什麼客戶生產?”一個customer who is canceling due to price may be offered a discount, while one canceling due to limited usage might need an upsell.

最後,這個分析可以作為驗證過程的一部分運行,帶來更大的透明度到機器學習模型。模型驗證通常關注的是整體模型的準確性。它還應該關注模型的“推理”,或者什麼特性對預測的貢獻最大。世鵬科技電子,它還可以幫助檢測當太多的個人預測的解釋與總體特征的重要性。

免費試著磚

相關的帖子

看到所有數據科學和毫升的帖子
Baidu
map