Amazon SageMaker Clarify 偏差監控的功能可以幫助資料科學家和機器學習工程師定期監控偏差預測。這些報告可以在SageMaker Studio 中查看細節報告,也可以在Amazon CloudWatch 設置警報通知,當偏差超過某一個值的時候發送通知給相關人員。
這個數據和訓練時候觀察到的數據點會不太ㄧ樣,因為上線的時候觀察到的資料變化,可能是暫時性的,也可能是永久性的。舉一個例子來說,假設訓練模型的時候使用的貸款利率與現在即時的利率相差很多,可能島直模型出現偏差。像是透過positive proportions in predicted labels (DPPL)來監視,指定值A是否落在允許範圍之內。除了設定上下區間之外,也可以將檢查的時間設定為每兩天檢查一次,或是不同的時間區間檢查資料更新的狀況。
具體來說,這個監控使用Normal Bootstrap Interval方法構造一個區間C=(c min ,c max) 使得 SageMaker Clarify 確信,在即時資料上如果計算出的真實偏差值很有可能包含在 C 這個範圍中。現在,如果置信區間 C 與允許範圍 A 重疊,SageMaker Clarify 會將其解釋為“目前的資料分佈的偏差度量值很可能落在允許範圍內”。如果 C 和 A 不相交,則 SageMaker Clarify 確信偏差度量不在 A 中,並通知系統發出警報。就如下圖所呈現的:
*圖片來源:Amazon AI Fairness and Explainability Whitepaper
並透過以下三步驟,設置偏差偏移報告:
(1)創建偏差漂移基準
在啟動偏差的監測工作,一開始的工作就是建立基準線。你可以從API當中看到,在此之前先準備好4個設定檔:模型本身的設定檔、資料本身的設定檔、以及跟偏差有關的設定、加上要預測的模型的相關設定。設定檔的細節就先不放上來了,大家可以自己到官方文件查詢。
from sagemaker.model_monitor.model_monitoring import ModelBiasMonitor
model_bias_monitor = ModelBiasMonitor(
role = role,
sagemaker_session = sagemaker_session,
max_runtime_in_seconds = 1800,
)
model_bias_monitor.suggest_baseline(
model_config = model_config,
data_config = model_bias_data_config,
bias_config = model_bias_config,
model_predicted_label_config = model_predicted_label_config,
)
(2)安排偏差漂移監控作業
承接上面我們初始化過了的model_bias_monitor,要幫他新增一個監控工作的排程。會需要剛剛的模型監控設定。並針對要監控的時間區間、端點名稱、監控的資料儲存路徑、監控門檻(threshold)的設定。
model_bias_analysis_config = None
if not model_bias_monitor.latest_baselining_job:
model_bias_analysis_config = BiasAnalysisConfig(
model_bias_config,
headers = all_headers,
label = label_header,
)
model_bias_monitor.create_monitoring_schedule(
analysis_config = model_bias_analysis_config,
output_s3_uri = s3_report_path,
endpoint_input = EndpointInput(
endpoint_name = endpoint_name,
destination = "/opt/ml/processing/input/endpoint",
start_time_offset = "-PT1H",
end_time_offset = "-PT0H",
probability_threshold_attribute = 0.8,
),
ground_truth_input = ground_truth_upload_path,
schedule_cron_expression = schedule_expression,
)
(3)檢查資料偏差漂移的報告
接下來可以到Amazon SageMaker Studio裡面就可以看到報表了。或者用python語法印出來,再從execution_summary裡面看數據報告細節也可以。
schedule_desc = model_bias_monitor.describe_schedule()
execution_summary = schedule_desc.get("LastMonitoringExecutionSummary")
上面我們提到,資料本身應該要落在某一個信賴區間裡面。但是這還不夠,除了落在一樣的區間裡面之外,區間裡面的資料分布也要很類似。舉下面這個表格為例子:
大學錄取假設情景
特徵 | 訓練數據 | 新的資料 |
---|---|---|
大考成績 | 0.70 | 0.10 |
平均成績 | 0.50 | 0.20 |
班級 | 0.05 | 0.70 |
假設資料的分佈是這樣,即便他們都落在0-1之間,但是實際上展現出來的特徵卻是完全不同的。這樣的行為,可以透過Amazon SageMaker Clarify 特徵監控可幫助資料科學家和 ML 工程師定期監控特徵漂移的狀況。
除了為每個資料點的推理提供解釋外,SageMaker Clarify 還提供 ML 模型的全局解釋,幫助資料科學家從整體上理解模型的特徵。你可以透過以下3個指標觀察SHAP值:
mean_abs – 所有實例的絕對 SHAP 值的平均值。
median – 所有實例的 SHAP 值的中位數。
mean_sq – 所有實例的平方 SHAP 值的平均值。
在這樣的背景下,我們也是透過3個步驟來設定特徵漂移的監控工作:
(1)為部署的模型創建 SHAP 基準
這個步驟涉及資料輸入、哪些資料是敏感的、如何預測以及模型及其訓練後偏差指標。如何選擇好的基準線?取決於今天你想從模型當中找到什麼樣的故事,舉例來說,在大學招生的案例下,你可能會想知道申請人的家鄉、或者人口普查背景是否相似,這些背景會不會影響他們申請到學校等等。以最簡單的方式,就是刪除其中一個特徵,看看對模型預測的影響改變。然而其實特徵與預測的影響,並不一定都是這麼直接的,特徵之間可能彼此有關聯,然後這些關聯一起影響模型預測也有可能。因此SHAP是基於這樣的概念,觀察特徵與模型預測之間的相關聯,然後再疊加上更嚴謹的計算去算出這些值。
和前面的範例碼相似,會需要先初始化ModelExplainabilityMonitor,加上跟模型解釋相關的設定檔案。比較需要注意的是SHAPConfig要記得選擇要用哪一個值mean_abs、median、mean_sq。
model_explainability_monitor = ModelExplainabilityMonitor(
role = role,
sagemaker_session = sagemaker_session,
max_runtime_in_second = 1800,
)
shap_config = SHAPConfig(
baseline = shap_baseline,
num_samples = 100,
agg_method = "mean_abs",
save_local_shap_values = False,
)
model_explainability_monitor.suggest_baseline(
data_config = model_explainability_data_config,
model_config = model_config,
explainability_config = shap_config,
)
(2)安排特徵漂移監控作業
和偵測偏差漂移的語法類似,只是將其更換成為前面初始化過的ModelExplainabilityMonitor。
model_explainability_analysis_config = None
if not model_explainability_monitor.latest_baselining_job:
model_explainability_analysis_config = BiasAnalysisConfig(
model_bias_config,
headers = all_headers,
label = label_header,
)
model_explainability_monitor.create_monitoring_schedule(
analysis_config = model_explainability_analysis_config,
output_s3_uri = s3_report_path,
endpoint_input = EndpointInput(
endpoint_name = endpoint_name,
destination = "/opt/ml/processing/input/endpoint",
start_time_offset = "-PT1H",
end_time_offset = "-PT0H",
probability_threshold_attribute = 0.8,
),
ground_truth_input = ground_truth_upload_path,
schedule_cron_expression = schedule_expression,
)
(3)檢查部署中特徵屬性漂移的報告
接下來可以到Amazon SageMaker Studio裡面就可以看到報表了。或者用python語法印出來,再從execution_summary裡面看數據報告細節也可以。
schedule_desc = model_explainability_monitor.describe_schedule()
execution_summary = schedule_desc.get("LastMonitoringExecutionSummary")
在Amazon SageMaker裡面,你可以透過以下指標監測不同的情境:
(1)預測標籤中正比例的差異 (DPPL)
(2)不同的影響 (DI)
(3)有條件接受的差異 (DCAcc)
(4)條件拒絕 (DCR) 的差異
(5)召回差異 (RD)
(6)接受率差異 (DAR)
(7)拒絕率差異 (DRR)
(8)精度差(AD)
(9)待遇平等 (TE)
(10)預測標籤中的條件人口統計學差異 (CDDPL)
(11)反事實翻轉測試 (FT)
這些指標是根據你在不同場景的時候可以選擇使用,比如說(1)衡量受歡迎的方面a和不受歡迎的方面d之間的正面預測比例的差異(2)與基於資格的另一個年齡組相比,貸款申請的接受率是否高於或低於預測?這兩者使用的指標就會是不同的,關於這些指標的定義與應用情境,可參考 Reference [2]跟[3]。
Reference
[1]. SageMaker Document
[2]. Measure Posttraining Data and Model Bias
[3]. Fairness Measures for Machine Learning in Finance
[4]. Feature Attributions that Use Shapley Values
[5]. Monitor Bias Drift for Models in Production
[6]. Monitor Feature Attribution Drift for Models in Production