當前位置:
首頁 > 最新 > 如何使用機器學習預測H1B簽證狀態

如何使用機器學習預測H1B簽證狀態

來源:datacamp

編譯:weakish

編者按:Sapient數據科學家Deepak Jhanji通過實例演示了基於Python進行機器學習的流程:探索性數據分析、特徵工程、訓練模型、評估結果.

機器學習提供了一個無需明確編程、可以自行學習和提升的系統。它使用特定的處理數據的演算法自行學習。在這篇教程中,我們將使用Python和XGBoost預測簽證結果。

這篇教程主要介紹以下內容:

探索性數據分析

特徵工程和特徵提取

基於XGBoost演算法訓練數據集

使用訓練好的模型進行預測

載入庫

Python庫是函數和方法的彙集,讓你在無需自行實現演算法的情況下編寫代碼。相應地,你需要下載、安裝、引入所用的庫。

,簡稱,是Python的基礎性的科學計算包。它包括強大的N維數組對象,精密的函數,集成C/C++的工具,線性代數,隨機數。緊隨其後的是,簡稱,一個開源的BSD許可庫,提供高性能、易於使用的數據結構和數據分析工具。接著是/庫,提供機器學習演算法。除了這些基礎性的庫之外,這篇教程還用到了(提供等統計函數)、(正則表達式)、(XGBoost分類器)。

H1B簽證和數據集

數據集可以通過Kaggle獲取:nsharan/h-1b-visa

它包括五年的H-1B申請記錄,共計近三百萬條記錄。數據集的列包括狀態、僱主名稱、工作地點、職位、現行工資、職業代碼、年份。

數據來自外國勞工認證辦公室(OFLC),每年都把可公開披露的數據上傳至網路。H1B簽證是一種需求強烈的非移民簽證,允許專門職業的外國勞工進入國境。H-1B簽證是一種基於僱傭關係的非移民簽證,對美國的臨時外國勞工發放。外國人想要申請H1-B簽證,必須有美國僱主為其提供工作,並向美國移民局提交H-1B申請。這也是國際留學生完成學業開始全職工作後最常見的簽證申請類別。

H1B申請流程的第一步是美國僱主為外國勞工提交H1B申請。第二步是由州就業保障機構確認現行工資和實際工資。如果現行工資高於潛在僱主提供的工資,那麼需要進行工資標準審批。H1B申請流程的第三步是提交勞工條件申請。接下來的步驟是提交H1B申請至USCIS(美國公民及移民服務局)的相應辦公室。各地的H1B申請處理時間不同。如果你希望加快申請,可以選擇加急處理。H1B申請流程的最後一步是通過輸入收據號查詢H1B簽證狀態。一旦USCIS記錄了你的申請,就會在他們的系統中更新你的簽證狀態。

數據集中,每個樣本應該包含以下信息:

每個申請唯一的編號

申請狀態,這是目標變數。

提交申請的僱主名稱。

職業名稱。

頭銜。

是否是全職職位。

職位的現行工資為支付給類似勞工的平均工資。

提交h1b申請的年份。

工作地點所在州、城市。

工作地點經度。

工作地點緯度。

載入數據集

首先要做的是將數據集載入為對象。pandas的方法可以載入csv文件:

理解數據

載入數據後,總是建議探索數據集,以確保載入的數據結構、格式正確,所有變數或特徵正確載入。

方法可以用來檢查數據信息。在我們的例子上,這個方法顯示數據以DataFrame的格式存儲,其中1個變數為整數格式,4個變數為浮點數格式,6個變數為對象格式。

方法返回首5行數據。這能讓你大概了解數據集。

方法將顯示最小值、最大值、均值、中位數、標準差,以及所有整數和浮點數變數的數目。

數據集共有11列,其中1列是目標變數()。也就是說,數據有1個目標變數和10個獨立變數。你當然應該檢查下目標變數的分類。你可以在df的特徵上使用方法。

這是一個分類問題。你需要預測的所屬分類。

特徵工程和數據預處理

注意,目標變數包含6個不同的分類:

Certified

Certified Withdrawn

Rejected

Invalidatd

Pending Quality and compliance review

Denied

取決於具體的業務問題,你需要決定這是一個多元分類問題,還是一個二元分類問題。如果是二元分類問題,那麼只有Certified(批准)和Denied(拒簽)兩個分類。所以你要做的第一件事是將剩餘的分類轉換為Certified或Denied。其中,Rejected和Invalidated都是拒簽的情形,所以應該將這兩種狀態轉換為Denied。在美簽中,Pending Quality and compliance的最終結果最可能是拒簽,所以也應該轉換為Denied。Certified withdrawn(批准後撤回)則是批准的情形,因為簽證已經批准了,只不過僱主因為種種原因(比如勞工更換工作單位)而決定撤回申請。

至於Withdrawn(撤回)分類,由於很難預測數據集中的Withdrawn案例最終結果如何,我們可以直接移除這一分類。另一個移除Withdrawn分類的原因是它在整個數據集中所佔的比例小於1%,這意味著模型很可能無法精確分類Withdrawn分類。

查看下數據集中批准和拒簽的比例各是多少?

結果:

整個數據集中,只有大約3.2%的申請被拒,這意味著,數據集中大約96.8%的申請被批准了。這表明數據集是高度失衡的。失衡數據集的一大問題是模型將更偏向頻繁出現的分類;在這個例子中,模型將偏向批准。有一些解決失衡問題的技術,不過本教程沒有使用它們。

處理缺失值

這個數據集並不整潔,其中包含很多缺失值。你必須處理缺失值。最簡單的方法是移除它們,不過這會損失信息。讓我們逐步看看如何處理缺失值:

就(僱主名稱)而言,我們可以用眾數(最常出現的值)填充11項缺失值:

如果不放心,我們可以用語句確保不存在空值。如有空值,Python會拋出AssertionError。

下面我們將查看(現行工資)。大部分申請的工資都在4萬到8萬美元之間。某些申請的工資超過50萬美元,有些則為0美元——由於這些情形很罕見,它們應該作為離散值移除(在2%分位和98%分位處截斷)。

截斷之後,現行工資的均值和中位數非常接近。中位數為6萬5千美金,而均值為6萬8千美金。我們最終將用均值替換缺失值。不過由於這兩個值非常接近,你也可以用中位數替換。

、、列也可以使用眾數填充缺失值。

移除lat和lon列

我們將移除(緯度)和(經度)列,因為它們和工作地點列重複了。在DataFrame上使用方法可以移除列,只需指定列名和軸(0表示行、1表示列)。

特徵創建

基於現有的數據有可能製作一個模型,不過,某些列包含尚待提取的信息。

包含僱主的名稱,其中包含大量不同的僱主(為僱員提交申請的公司)。我們無法直接在模型中使用,因為類別太多了;超過500個不同僱主。

提交申請最多的5家公司是Infosys、TCS、Wipro、Deloitte、IBM。不過,根據經驗,由大學提交的申請更容易通過。

所以,問題是,我們如何從該特徵中提取出一些信息?

好吧,我們大概可以創建一個名為的新特徵:僱主名稱是否包含(大學)字元串。

創建一個空列相當簡單:

在檢查是否包含字元串時,為了避免大小寫問題,我們將僱主名稱統一轉換為小寫:

變數也存在這個問題。它包括職業名稱。我們將創建一個名為的新變數:

由於所在州對簽證申請影響重大,我們將從中分割出州信息:

為了計算概率,我們需要將目標分類轉換為二值,即0和1.

移除用不到的變數:

在閱讀建模部分之前,別忘了檢查變數的數據類型。例如,有些變數應該被用作類別或因子,但是它們的格式卻是對象字元串。

所以,我們需要將這些變數的類型從對象轉為類別,因為它們屬於類別特徵。

切分數據為訓練集和測試集

將數據集一分為二,60%為訓練集,40%為測試集。

檢查一下訓練集中是否有null值:

應該沒有:

由於XGBoost只能處理數值數據。因此我們需要使用對類別值進行獨熱編碼。

XGBoost

XGBoost是「Extreme Gradient Boosting」(極端梯度提升)的簡稱,這是一種監督學習方法。具體而言,是梯度提升決策樹的一種注重速度和性能的實現。

提升是一種集成方法,集成方法尋求基於「弱」分類器創建強分類器(模型)。在這一上下文中,弱和強指預測目標變數實際值的準確程度。通過在其他模型基礎上迭代地添加模型,前一個模型的誤差將由下一個預測模型糾正,直到達到滿意的表現。

梯度提升同樣包含逐漸增加模型,糾正之前模型誤差地集成方法。不過,並不在每次迭代中給分類器分配不同的權重,而是用新模型去擬合之前預測的新殘差,並最小化加上最新預測後的損失。

所以,最終將使用梯度下降技術更新模型,梯度提升由此得名。

關於XGBoost更多的信息,可以參考我們的XGBoost課程。

XGBoost可以直接通過pip安裝:

用於分類的XGBoost模型為。創建時,可以設為,即特徵數的平方根。是尋找最佳分割時需要考慮的特徵數。所以,假設為100,那麼取值為10.

我們使用調整超參數:

實現了和方法。它也同樣實現了、、、、方法(如果底層使用的估計器實現了這些方法。)

應用這些方法的估計器的參數是通過在參數網格上交叉驗證、網格搜索得到的。

的取值,推薦1、10、100,的取值,推薦0.1、0.01、0.5。

是提升階段數。梯度提升對過擬合的魯棒性相當不錯,因此較大的取值通常意味著更好地表現。

學習率。學習率可以減慢模型的訓練速度,避免過快學習導致過擬合。通常將學習率設為0.1到0.3之間的數字。

通過三折交叉驗證,選出最佳和值。

擬合訓練集得到了97%的精確度(學習率0.5):

將返回網格搜索得到的最佳模型:

結語


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

IBM最新專利:為機器學習模型打上水印
看官,機器學習了解一下?

TAG:機器學習 |