感謝您收看本集節目。這裡是「測驗資料中的拼字錯誤辨識」。我叫Nathan Gambles,是Frontgrade Technologies的首席產品工程師。我在Frontgrade負責高可靠性積體電路的製造和測試,我們的客戶主要針對醫療、航空航太、軍事以及其他任何需要高安全性電子產品的領域。
今天,我將和大家分享我參與的一個根本原因分析調查案例。當時我們發現數據中存在一些有趣的異常情況,最終發現是由於一些拼字錯誤導致了測試結果出現問題。接下來,我將和大家分享我們是如何辨識並進一步調查這些問題的。
我先簡單介紹一下我當時的工作內容。就像我剛才說的,我當時在生產積體電路。螢幕上這裡有一個積體電路的例子。很多人把它們叫做電腦晶片。積體電路的特點是形狀、尺寸和引腳數量各不相同。很多積體電路都有許多不同的接腳,每個接腳的功能都不一樣。我們在測試這些元件的時候,需要對許多不同的引腳進行相同的測試。我們稍後會從測試數據中看到這一點。
關於積體電路,我想補充一點,就是頂部的標記。通常,這些標記會標明製造商、產品名稱、批號,也可能是生產日期代碼。有時它們還會有序號。我參與研發的大多數產品都有序號,我們也正是透過序號來追蹤產品在整個生產過程中的流動。在接下來的內容中,序號將至關重要。
我們生產的零件來自我工作的工廠,這家工廠屬於高品種、低產量工廠。我們生產的批次不多,不會同時生產太多零件,但任何一天,我們都可能會生產多種不同的產品。
我們批量生產後,會先進行整理。接下來我將介紹測試環節的操作流程。在測試環節,我們會將測試程式載入到自動化測試設備上。程式載入完畢後,操作員會取出一個零件,查看零件,讀取零件上的標記,然後將零件放入測試夾具中,輸入零件的序號,按下測試按鈕。測驗執行完畢後,資料會被收集。測試完成後,操作員會將零件從測試夾具中取出,放回托盤,然後對該批次的所有零件重複上述步驟。
簡單來說,我剛剛描述的是我們測試操作的一般流程。主要流程是:首先在室溫下測試零件。然後對零件進行應力測試。之後再次在室溫下測試零件,最後在冷態和熱態下進行測試。冷態和熱態測試的溫度範圍分別對應規範規定的最低和最高工作溫度。
我們隨後會對零件進行後續測試,包括在室溫下再次測試,以及在冷態和熱態下再次測試。第二輪測試是我們品質檢查的一部分,旨在確保在第二和第三道工序的第一輪篩選中,不會有過多的故障部件漏網。我參與的根本原因調查,源自於我們在第四和第五道測試工序中發現故障率高於預期,而我們原本預期這兩道工序的故障率不會太高。
調查的許多分支都朝著不同的方向發展。我將重點介紹其中一個分支……我們收集了測試步驟中一些故障的數據,並深入分析了這些數據。通常情況下,對於給定的測量參數,如果我們查看冷態數據,會發現對於某個設備而言,如果它在冷態下處於分佈的高端,那麼在室溫下也會處於分佈的高端。在熱態下,它同樣處於分佈的高端。同樣,如果某個設備在冷態下處於低端或中間位置,情況也是如此。
有些後期失效的裝置並不符合這種模式。它們的模式是這樣的:有時一些數據顯示它們的性能處於高端,而另一些數據又顯示它們的性能處於低端,之後又有一些數據顯示它們的性能再次處於高端。這顯然不合邏輯。從半導體裝置物理學的角度來看,這根本說不通。
經過一番頭腦風暴,我們認為造成我們看到的數據最可能的根本原因是,我們可能實際上並沒有查看來自我們預期的設備的數據,而且我們的數據中可能混入了一些拼寫錯誤,從而導致了這種混亂。
隨著調查的深入,我們希望找到一種分析技術,能夠處理來自我們所有部件的數據。我們再次面臨一個高度混合的環境。我們需要取得數據。我們希望確保操作過程不需要太多的專業知識。我們想要一個相對簡單易行、結果易於查看的流程。這就是我們進行這項調查的目標。
這就是我們工作的背景和原因。我將要使用的範例資料可以在JMP期刊中找到(連結在此)。點擊該按鈕,即可產生一個資料集。我已經打開了這個資料集。首先,我想簡單介紹一下數據內容,以便我們更好地理解它。
這是數據。這個資料表中有 441 行資料。每一行都記錄了一次測試操作中的批次資訊。這與我們剛才查看的 PowerPoint 內容相符。數據包括測試溫度以及操作員在測試過程中輸入的序號。此外,該資料集還包含 300 列測量值。資料表中的每一行都代表一次測試程序的執行。我們可以看到,測試次數很多,共有 300 次。
我之前提到過我們有多個不同的引腳。可以看到,測試 A 在引腳 1 上進行了測量。測試 A 也測量了引腳 2。如果我快速滾動頁面,可以看到我們對許多不同的引腳進行了多次測試。還有一些測試並非逐一引腳進行。有些測試沒有這種特性,但很多測試都有。基本上,這裡包含了各種各樣的測試,總共有 300 列測量值。
我想指出的一點是,我們已經有了數據表,但數據是堆疊的。有些行是室溫數據,有些行是低溫數據,有些行是高溫數據。在進行資料準備時,我將使用 JMP 中的分組功能,以確保我們計算的統計資料不會受到這些溫度差異的影響。
我快速瀏覽一下數據。如果我在這裡打開一個圖表產生器。我們看一下這張圖表,可以看到我們目前處於哪個操作階段,我們採集資料時的溫度,以及所有測試過的序號。 Y軸代表測量值,我們可以看到室溫下的數據點就在這裡。低溫下,數據點向下移動到另一個值。高溫下,數據點再次移動。然後回到室溫,再回到低溫,最後回到高溫。
半導體測量值出現偏差是很常見的。抱歉,半導體資料蒐集過程中出現偏差非常普遍。如果我瀏覽很多測試數據,我可以看到我們對很多筆都做了相同的測試。最後會得到很多高度相關的參數。如果我繼續瀏覽,我會發現很多測試結果都非常相似。但如果我跳到一些看起來不同的測試,我會發現有些測試的數據看起來不一樣。有些測試對溫度的反應也不同。
舉個例子。部分測量值確實存在一些相當極端的異常值。在半導體產業,如果裝置有缺陷並發生故障,而且故障幅度很大,這種情況並不少見。處理異常值是我們流程中必須考慮的問題。我們發現,由於溫度的影響,測量值出現了偏移。同樣,由於我們的資料是按列分組的,因此我們需要使用 JMP 的分組功能來處理這個問題。
快速查看序號的分佈情況,可以看到這個資料集裡有 65 個不同的唯一序號條目。這個樣本資料集包含 65 個序號。我們已經探索了數據,對數據有了一定的了解。接下來,我們將開始執行先前確定的、能夠有效識別資料中拼字錯誤的流程。
第一步,我們需要對資料進行一些準備工作,使用「探索異常值」功能來去除異常值。我們也要使用公式列計算標準化 Z 分數。為此,我們將使用「分析」、「篩選」、「探索異常值」功能。我們將提取全部 300 個測量值,並按溫度進行分析。
我打算使用分位數範圍異常值來偵測方法。需要說明的是,在整個演示過程中,我將使用 JMP 的預設來處理所有平台。我將使用預設設定來偵測分位數範圍異常值。在初始狀態下,為了清除表格中的異常值,我將使用「建立公式列」選項。
我將保留預設設定。接下來,我將處理「房間」資料。對於「房間」數據,我將執行相同的操作,即建立公式列。對於「熱門」數據,我也將執行相同的操作,即建立公式列。現在,我們的表格中已經產生了多個公式列。如果我在這裡進行一些清理,我們將獲得 300 列新數據,其中已刪除了異常值。
接下來我想做的是,我想將操作和溫度設定為分組依據……因為我將使用新的公式列功能,但我希望透過設定此參數來實現分組依據功能,以便按溫度和操作計算所有 300 個異常值參數的統計資料。
我已經清除了所有 300 列中的異常值。如果我右鍵單擊“新公式”列下的“分佈”選項,可以看到“標準化”功能,它會計算所有參數的標準化 Z 分數。這樣就建立了一組全新的列。如果我再進行一些清理工作,現在我們就有了 300 列標準化資料。
為了快速直觀地展示我們剛剛取得的成果,我打開圖表產生器,查看測試 E8。之前,我們遇到了一個極端異常值,導致數據難以辨認。移除異常值後,我們能夠看到數據,但不同操作和不同溫度下的測量值仍然存在跳躍。在按操作和溫度進行標準化後,我們使每個分佈都以零為中心,標準差均為 1,這意味著所有資料幾乎都落在正負 3 的範圍內。
在這個尺度上,我們找錯位置了。現在我們可以問一些問題,例如,這些點在那個操作和溫度下,是處於分佈的高端?是處於分佈的低端?還是處於分佈的中間位置?這就是我們在資料準備步驟中所做的。
接下來,我們要做的就是從這300個參數中找出哪些參數能夠有效預測序號。為此,我們將使用預測因子篩選。我知道從數據來看,有很多參數彼此高度相關。我也知道預測因子篩選的結果會得到一些高度相關的參數。在進行預測因子篩選之後,我們將使用聚類變數來幫助我們剔除許多高度相關的參數,只保留我們正在尋找的最具代表性的測試結果。
為此,我們將使用篩選功能,即預測篩選。我們會將所有標準化列輸入其中,並讓它找出序號。同樣,這裡也有一些選項。在本演示中,我使用的是預設設定。 JMP 將處理這些數據,並產生一份報告,其中會按優先順序排序哪些參數最能準確描述裝置的序號。
快速瀏覽一下,第一個參數看起來非常好,接下來的幾個參數也相當不錯。如果我們繼續往下滾動,似乎在20個參數之後,增加新的參數並沒有帶來太大的提升。我將選擇其中最好的20個參數。這些參數已經在資料表中選定了。現在,在「分析聚類」下,我將使用聚類變數來幫助識別這20個參數中高度相關的變數。
如果我把這20個數字放在Y列,就能得到這份報告。我通常會在報告中尋找鮮紅色和鮮藍色。我會數一數方格的數量。看起來有1、2、3、4、5、6。透過這次分析,我預計會得到大約六個參數,我們可以用它們來進行拼字檢查。
在繼續之前,我要確保我的列選擇中沒有任何已選擇的列,這樣當我在這個報告中選擇它們時,它們才會被選中。從下面的聚類摘要來看,它似乎使用了我們全部 20 個參數,並顯示「我可以將它們分成四個組,以下是每個組中最具代表性的組」。
那很好。但我發現這個平台很喜歡對資料進行聚類。看起來我這裡有兩個參數跟其他20個參數的相關性都很差。它們被添加到了其他一些分組中,而我並不希望這樣。我不僅會查看哪個分組最具代表性,還會查看這一列,確保如果某個參數最終被歸類為某個分組,那麼它在該分組內的其他參數也具有良好的相關性。
往下看,我們發現很多數值都非常接近 1,這表示它們之間高度相關。但是,這裡有一個數值非常接近 0,它與它所屬的聚類組的相關性很差,與下一個最近的聚類組的相關性也不好,實際上它與任何聚類組都沒有相關性。我還是想把這個參數也考慮進去。再往下看,似乎還有一個數值與它所屬的聚類組的相關性也不好。這四個數值加上這兩個數值,剛好是我根據圖片預期得到的六個數值。
這樣我們就從資料表中選出了六列。如果我對列進行一些調整,例如取消分組或重新分組,就能得到一個列表,其中包含了我們根據現有資料用來理解序號的最佳預測因子。
現在,我們已經確定了重要的參數。接下來,我們將進行分析,以確定是否存在序號錯誤。我們將使用層次聚類平台進行分析。在「分析聚類」下的「層次聚類」中,我們將使用剛剛確定的六個最佳預測因子,並用序號進行標記。
當然還有更多選項。我只是沿用了 JMP 的所有預設設定。這樣就得到了層次聚類報告。我想在這裡做一些修改,例如設定顏色聚類,這樣更容易區分不同的群組。我喜歡控制聚類的數量。最初查看資料時,這批資料中有 65 個不同的序號。我發現,如果不要剛好設定成 65,而是比預期批次中的設備總數略少一些,這種方法效果最好。在這個例子中,我把它設定成…不設 65,而是 58。
最後,為了完成這項分析,我需要從資料表中取得一個資料篩選器,並將其設定為按序號篩選。這樣我就可以選取所有序號為 1 的行。如果這樣做,我們可以在樹狀圖報告中看到,所有序號為 1 的資料行都會聚集在一起。它們顏色相同,並且垂直排列。
這表明,我們在這裡使用的聚類演算法在給定的六個參數下運作良好。如果我們逐一查看,序號 2 的聚類效果也很好。如果我們逐序檢視數據,觀察它們的聚類情況……我們來到序號 17,看起來大部分數據都集中在下方,而至少有一個數據點似乎位於上方。
這些點之間存在相當大的垂直距離。但比垂直距離更重要的是,如果你畫一條線沿著這些線連接你正在觀察的點,這條線會是什麼樣子。看起來我需要畫這條線。那麼問題是,你需要往右看多遠?我們需要向右看很遠才能建立這個連結。向右看得越遠,這些數據就越有可能與實際情況不符。
根據我對這幅樹狀圖的理解,我認為這些數據看起來截然不同。如果我放大這個看似獨立的點,會發現,根據我們掌握的六個參數,在測試中,大多數情況下,那些根據電氣測試資料呈現出類似特徵的設備,其輸入的序號都是 12,只有一次例外,當時輸入的序號是 17。
這很可能是由於零件上的標記被誤讀造成的。根據字體和標記的大小,數字 2 很可能看起來像數字 7。這是我們在數據中發現的常見拼字錯誤方式之一。這種方法已經辨識出了這些錯誤。是的,我們已經能夠使用這種方法識別出此資料集中的拼寫錯誤。
接下來,我們選擇所有與裝置序號 18 相符的點。看起來這些點之間存在一些距離。放大資料後,如果我們重複先前的操作,在這些點之間畫線,看起來我可以將它們連接起來。
那麼問題來了,我需要往右走多遠?其實我根本沒走多遠。這些數據看起來都非常相似。設備 18 和設備 29 的資料看起來幾乎一模一樣,這導致設備 18 的條目之間出現了一些細微的差別。這在我看來不像是個筆誤,只是剛好有兩個部分看起來比較相似而已。我肯定不會花時間去深入調查這件事。
如果我們繼續查看更多這樣的序號,它們聚集得很好,我們來到了 25。看起來這裡出現了一個分離點。如果我們繼續觀察,似乎需要向右移動相當一段距離,所以這些數據看起來不太相似。如果我們放大選定的單一點,再放大一點,看起來大多數情況下,測試中看起來像這樣的零件的序號都是 26,但有一個例外,我們得到了 25。
如果我們放大查看其他選定的資料點,25 通常看起來是這樣的,但是…似乎有一個實例出現了 26 這個條目。如果我們密切注意樹狀圖中的選取項,並在序號 25 和 26 之間切換,看起來是這樣的…我們發現了一個實例,其中有兩個設備,分別是設備 25 和 26。它們都進行了測試。但是,當測試設備 25 時,輸入的序號是 26。而當測試設備 26 時,輸入的序號卻是 25。
這些資料可能順序錯了,或者其他什麼原因導致了測驗資料中出現這種類型的拼字錯誤。這是我們用這種方法發現的另一種拼字錯誤。我們可以繼續檢查剩下的序號。如果我們要做完整的測試,我們會這麼做。但為了節省時間,我只檢查這些。
在這個過程中,我們遇到了一個問題:能否找到一種簡單的方法,無需太多專業知識就能分析數據,從而判斷是否存在拼字錯誤?我們剛剛示範的這個流程,我覺得我們成功地找到了一個容易遵循的方法。雖然我們對這些測試參數的具體內容並不十分了解,但我們仍然能夠完成這個流程,並至少得到一份可能的拼字錯誤清單,以便與相關領域的專家進行討論。
這個過程非常簡單,無論是經驗豐富的工程師或新工程師都能輕鬆上手。它完全使用了 JMP 的內建功能,我們甚至使用了所有預設參數,這使得自動化和腳本編寫變得非常容易。這就是我們在自己的環境中所做的。他們不必手動操作,但所有工程師都會了解並理解我今天向大家示範的整個流程。
這次測試很成功。我們從中獲得了寶貴的經驗。我們能夠識別測試數據中的拼字錯誤,並利用這些經驗發現了一些系統性問題。這類拼字錯誤經常發生,原因是什麼?這種拼字錯誤也常發生,原因又是什麼?我們已經對流程系統進行了一些改進。它不僅幫助我們提升了訓練效果,而且對於與測試操作員進行討論和回饋也非常有用,讓我們能夠了解發現的問題和遇到的困難。當他們掌握更多資訊時,就能更專注於這些問題,並就如何改進以及如何持續提升產品品質提出建議。
這就是我們開發並使用的流程。如果您擁有縱向數據,例如在相同或近似相同的條件下多次測試設備或產品的數據,那麼這些方法或許也能幫助您發現數據中可能存在的問題。感謝您的參與。希望對您有幫助。祝您愉快!