SPSS ノートブックにおける予測分析のためのデータ準備アルゴリズム

Descriptivesは、大規模データに対して、一変量および二変量の統計量の効率的な計算と、自動データ前処理機能を提供します。 データプロファイリング、データ探索、およびその後のモデリング分析に向けたデータ前処理において、幅広く活用できます。

主な統計機能には、基本的な一変量および二変量の統計的要約、一変量の順序統計量、生データからのメタデータ情報の生成、単一フィールドおよびフィールドペアの可視化のための統計、データ前処理機能、ならびにデータの興味度スコアおよびデータ品質評価が含まれます。 これは、自動データ処理、ユーザーとの対話、および単一のフィールドや、指定されたターゲットを含むフィールド間の関係に関するデータインサイトの取得に必要な機能を効率的にサポートします。

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. 予測変数とターゲット変数のペアが強制されます。

スマートなデータ前処理

Smart Data Preprocessing(SDP)エンジンは、データ準備のための分析コンポーネントです。 これは、関連性分析、関連性および冗長性分析、スマートメタデータ(SMD)統合という3つの独立したモジュールで構成されています。

通常のフィールド、リストフィールド、マップフィールドを含むデータに対し、関連性分析は入力フィールドとターゲットとの関連性を評価し、その後の分析のために指定された数のフィールドを選択します。 その一方で、リストフィールドやマップフィールドを展開し、選択されたフィールドを通常の列ベースの形式に抽出します。

関連性分析は効率的であるため、広範なデータに含まれる膨大な数のフィールドを、従来の分析手法が適用可能な適度なレベルまで絞り込むためにも利用されています。

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()

疎データ変換ツール

Sparse Data Convertor (SDC) は、通常のデータフィールドをリストフィールドに変換します。 リストフィールドに変換したいフィールドを指定するだけで、SDCがその測定レベルに応じてフィールドを統合します。 最大で3種類のリストフィールドが生成されます。具体的には、連続型リストフィールド、カテゴリ型リストフィールド、およびマップフィールドです。

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()

データ分割

この関数を使用して、1 つ以上の新しいビン分割フィールドを作成したり、ビンの値を決定するために使用するビン定義を取得したりすることができます。

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)

16進数ビニング

この関数を使用すると、2つのフィールドに対して16進数のビン(区分)を計算して割り当てることができます。

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' の入力値とほぼ同じ大きさの擬似乱数サンプルを生成します。

サンプリングは、'samplingCount/'totalRecords'」として計算されるサンプリング比率でSamplingComponentを呼び出すことによって達成される。

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)