Notebook 中的 SPSS 預測分析資料準備演算法

敘述性可提供對單變量及雙變量統計資料的有效計算,以及針對大規模資料的自動資料準備特性。 它可以廣泛用於資料側寫、資料探索及資料準備,以進行後續建模分析。

核心統計特性包括基本單變量及雙變量統計彙總、單變量順序統計資料、從原始資料建立 meta 資料資訊、用於視覺化單一欄位及欄位配對的統計資料、資料準備特性,以及資料有趣性評分與資料品質評量。 它可以有效地支援下列作業所需的功能:自動化資料處理、使用者互動性,以及取得單一欄位或包含指定目標的欄位配對之間關係的資料洞察。

Python 程式碼範例:

from spss.ml.datapreparation.descriptives import Descriptives

de = Descriptives(). \
    setInputFieldsList(["Field1", "Field2"]). \
    setTargetFieldList(["Field3"]). \
    setTrimBlanks("TRIM_BOTH")

deModel = de.fit(df)

PMML = deModel.toPMML()
statXML = deModel.statXML()

predictions = deModel.transform(df)
predictions.show()

敘述性選取策略

在欄位配對數過大(例如,大於預設值 1000)時,可使用 SelectionStrategy 來限制將要為其計算雙變量統計資料的配對數。 此策略涉及 2 個步驟:

  1. 根據單變量統計資料限制配對數。
  2. 根據核心關聯雙變量統計資料限制配對數。

請注意,在下列狀況下,一律會將配對包括在內:

  1. 配對由預測值欄位及目標欄位組成。
  2. 強制執行預測值或目標配對。

智慧型資料預先處理

「智慧型資料預先處理 (SDP)」引擎是用於資料準備的分析元件。 它由三個個別模組組成:相關性分析、相關性及冗餘分析,以及智慧型 meta 資料 (SMD) 整合。

如果資料具有一般欄位、清單欄位及對映欄位,則相關性分析會評估輸入欄位與目標之間的關聯,並選取指定數目的欄位進行後續分析。 同時,它會展開清單欄位及對映欄位,並將選取的欄位擷取成一般直欄型格式。

由於相關性分析的效率,它也用來將廣泛資料中的大量欄位減少到傳統分析可以運作的中等層次。

SmartDataPreprocessingRelevanceAnalysis 會匯出下列輸出:

  • JSON 檔,包含模型資訊
  • 新的直欄型資料
  • 相關資料模型

Python 程式碼範例:

from spss.ml.datapreparation.smartdatapreprocessing import SmartDataPreprocessingRelevanceAnalysis

sdpRA = SmartDataPreprocessingRelevanceAnalysis(). \
    setInputFieldList(["holderage", "vehicleage", "claimamt"]). \
    setTargetFieldList(["vehiclegroup", "nclaims"]). \
    setMaxNumTarget(3). \
    setInvalidPairsThresEnabled(True). \
    setRMSSEThresEnabled(True). \
    setAbsVariCoefThresEnabled(True). \
    setInvalidPairsThreshold(0.7). \
    setRMSSEThreshold(0.7). \
    setAbsVariCoefThreshold(0.05). \
    setMaxNumSelFields(2). \
    setConCatRatio(0.3). \
    setFilterSelFields(True)

predictions = sdpRA.transform(data)
predictions.show()

稀疏資料轉換器

「稀疏資料轉換器 (SDC)」可將一般資料欄位轉換為清單欄位。 您僅需指定要轉換為清單欄位的欄位,SDC 即會根據其測量層次來合併這些欄位。 它最多會產生三種類型的清單欄位:連續清單欄位、種類清單欄位及對映欄位。

Python 程式碼範例:

from spss.ml.datapreparation.sparsedataconverter import SparseDataConverter

sdc = SparseDataConverter(). \
    setInputFieldList(["Age", "Sex", "Marriage", "BP", "Cholesterol", "Na", "K", "Drug"])
predictions = sdc.transform(data)
predictions.show()

分組

您可以使用此函數來衍生一個或多個新的 bin 欄位,或取得用於決定 bin 值的 bin 定義。

Python 程式碼範例:

from spss.ml.datapreparation.binning.binning import Binning

binDefinition = BinDefinitions(1, False, True, True, [CutPoint(50.0, False)])
binField = BinRequest("integer_field", "integer_bin", binDefinition, None)

params = [binField]
bining = Binning().setBinRequestsParam(params)

outputDF = bining.transform(inputDF)

六邊形分組

您可以使用此函數來計算六邊形分組並將其指派給兩個欄位。

Python 程式碼範例:

from spss.ml.datapreparation.binning.hexbinning import HexBinning
from spss.ml.param.binningsettings import HexBinningSetting

params = [HexBinningSetting("field1_out", "field1", 5, -1.0, 25.0, 5.0),
          HexBinningSetting("field2_out", "field2", 5, -1.0, 25.0, 5.0)]

hexBinning = HexBinning().setHexBinRequestsParam(params)
outputDF = hexBinning.transform(inputDF)

複式取樣

complexSampling 函數會從資料來源中選取記錄的虛擬隨機樣本。

complexSampling 函數會使用簡式精確取樣及簡式比例取樣,對送入的資料執行分層取樣。 分層欄位將指定為輸入,同時還必須提供要取樣的每個階層的取樣計數或取樣比例。 您也可以選擇性地提供每個階層的記錄計數以提高效能。

Python 程式碼範例:

from spss.ml.datapreparation.sampling.complexsampling import ComplexSampling
from spss.ml.datapreparation.params.sampling import RealStrata, Strata, Stratification

transformer = ComplexSampling(). \
    setRandomSeed(123444). \
    setRepeatable(True). \
    setStratification(Stratification(["real_field"], [
    Strata(key=[RealStrata(11.1)], samplingCount=25),
    Strata(key=[RealStrata(2.4)], samplingCount=40),
    Strata(key=[RealStrata(12.9)], samplingRatio=0.5)])). \
    setFrequencyField("frequency_field")

sampled = transformer.transform(unionDF)

計數及樣本

countAndSample 函數會產生大小約等於 'samplingCount' 輸入的虛擬隨機樣本。

取樣是透過呼叫 SamplingComponent ,其取樣比例計算為 'samplingCount / totalRecords' ,其中 'totalRecords' 是送入資料的記錄計數。

Python 程式碼範例:

from spss.ml.datapreparation.sampling.countandsample import CountAndSample

transformer = CountAndSample().setSamplingCount(20000).setRandomSeed(123)
sampled = transformer.transform(unionDF)

MR 取樣

mrsampling 函數會以指定的取樣比例,從資料來源中選取記錄的虛擬隨機樣本。 樣本大小約為記錄總數的指定比例,但受限於選用的上限。 記錄集及其總數會因隨機種子而異。 資料來源中每筆記錄的選取機率皆相同。

Python 程式碼範例:

from spss.ml.datapreparation.sampling.mrsampling import MRSampling

transformer = MRSampling().setSamplingRatio(0.5).setRandomSeed(123).setDiscard(True)
sampled  = transformer.transform(unionDF)

取樣模型

samplingModel 函數會針對給定的步驟大小 N ,選取每第 N 筆記錄所定義輸入記錄子序列的虛擬隨機百分比。 樣本大小總計可以選擇性地由上限來限制。

在步長為 1 時,子序列即為輸入記錄的整個序列。 在取樣比例為 1.0 時,將會變成確定性選取,而非虛擬隨機選取。

請注意,對於分散式資料,samplingModel 函數會將選取準則獨立套用至每個資料分割。 樣本大小上限(如果有的話)也會獨立套用至每個分割(而非整個資料來源);啟動每個分割時,將會重新啟動子序列。

Python 程式碼範例:

from spss.ml.datapreparation.sampling.samplingcomponent import SamplingModel

transformer = SamplingModel().setSamplingRatio(1.0).setSamplingStep(2).setRandomSeed(123).setDiscard(False)
sampled = transformer.transform(unionDF)

循序取樣

sequentialSampling 函數類似於 samplingModel 函數。 對於給定的步長 N,它也會選取由每第 N 筆記錄所定義的輸入記錄子序列的虛擬隨機百分比。 樣本大小總計可以選擇性地由上限來限制。

在步長為 1 時,子序列即為輸入記錄的整個序列。 在取樣比例為 1.0 時,將會變成確定性選取,而非虛擬隨機選取。 sequentialSampling 與 samplingModel 之間的主要差異如下:對於分散式資料,sequentialSampling 函數會將選取準則套用至整個資料來源,而 samplingModel 函數會將選取準則獨立套用至每個資料分割。

Python 程式碼範例:

from spss.ml.datapreparation.sampling.samplingcomponent import SequentialSampling

transformer = SequentialSampling().setSamplingRatio(1.0).setSamplingStep(2).setRandomSeed(123).setDiscard(False)
sampled = transformer.transform(unionDF)

上層主題: SPSS 預測分析演算法