空間エラー・モデル
空間エラー・モデル(SEM)では、線形方程式のerror項に空間ラグが導入されています。
残差の空間ラグを追加することによって、ネイバーのエラーが観察エラーに影響します。 これにより、次の式に示すように、追加のパラメータがエラー用語の空間ラグに関連付けられます:
前述の式で、W
は空間加重マトリックスです。
SpatialErrorRegressor
クラスは、空間エラー・モデルを実装します。このモデルを使用するには、spatial_weights_definition
パラメータの定義が必要です。 次の表に、SpatialErrorRegressor
クラスの主なメソッドを示します。
メソッド | 説明 |
---|---|
fit |
指定されたトレーニング・データからSpatialErrorRegressor モデルをトレーニングします。 モデルには、エラー用語の空間ラグのパラメータが含まれます。
|
predict |
訓練されたパラメータ(エラー用語の空間ラグに関連付けられたパラメータを含む)を使用して、指定されたデータのターゲット変数を見積ります。 |
fit_predict |
トレーニング・データを使用して、fit およびpredict メソッドを順番にコールします。
|
score |
指定されたデータのR平方統計を返します。 |
詳細は、「Oracle Spatial AI Python APIリファレンス」のSpatialErrorRegressorクラスを参照してください。
次の例では、block_groups
を使用します。 隣接する観測間の関係を確立するSpatialDataFrame
spatial_weights_definition
パラメータを定義するSpatialErrorRegressor
クラスのインスタンスが作成されます。 次に、データを標準化するための前処理ステップとともに、空間パイプラインにモデルを追加します。 モデルは、トレーニング・セット(X_train
)およびMEDIAN_INCOME
列をターゲット変数として使用してトレーニングされます。 最後に、テスト・セット(X_test
)を使用してpredict
およびscore
メソッドをコールし、ターゲット変数とモデルのR-Squareスコアの値をそれぞれ推定します。
from oraclesai.preprocessing import spatial_train_test_split
from oraclesai.weights import KNNWeightsDefinition
from oraclesai.regression import SpatialErrorRegressor
from oraclesai.pipeline import SpatialPipeline
from sklearn.preprocessing import StandardScaler
# Define features
X = block_groups[["MEDIAN_INCOME", "MEAN_AGE", "HOUSE_VALUE", "INTERNET", "geometry"]]
# Define training and test sets
X_train, X_test, _, _, _, _ = spatial_train_test_split(X, y="MEDIAN_INCOME", test_size=0.2, random_state=32)
# Create an instance of SpatialErrorRegressor
spatial_error_model = SpatialErrorRegressor(spatial_weights_definition=KNNWeightsDefinition(k=5))
# Add the model in a Spatial Pipeline along with a preprocessing step
spatial_error_pipeline = SpatialPipeline([("scaler", StandardScaler()), ("spatial_error", spatial_error_model)])
# Train the model with MEDIAN_INCOME as the target variable
spatial_error_pipeline.fit(X_train, "MEDIAN_INCOME")
# Print the predictions with the test set
spatial_error_predictions_test = spatial_error_pipeline.predict(X_test.drop(["MEDIAN_INCOME"])).flatten()
print(f"\n>> predictions (X_test):\n {spatial_lag_predictions_test[:10]}")
# Print the R-squared metric with the test set
spatial_error_r2_score = spatial_error_pipeline.score(X_test, y="MEDIAN_INCOME")
print(f"\n>> r2_score (X_test):\n {spatial_error_r2_score}")
プログラムは次の出力を生成します:
>> predictions (X_test):
[ 92285.13545208 100551.0381313 30910.61123168 45166.3218764
177515.68764358 44088.89962954 98205.35728383 27788.19879028
72553.17695035 24875.81828048]
>> r2_score (X_test):
0.635646418630968
トレーニング済モデルのプロパティ・サマリーを出力すると、追加のlambda
パラメータが表示されます。 このパラメータは、エラー用語の空間ラグに関連付けられています。
REGRESSION
----------
SUMMARY OF OUTPUT: MAXIMUM LIKELIHOOD SPATIAL ERROR (METHOD = FULL)
-------------------------------------------------------------------
Data set : unknown
Weights matrix : unknown
Dependent Variable : dep_var Number of Observations: 2750
Mean dependent var : 69703.4815 Number of Variables : 4
S.D. dependent var : 39838.5789 Degrees of Freedom : 2746
Pseudo R-squared : 0.6285
Sigma-square ML :472895616.755 Log likelihood : -31440.423
S.E of regression : 21746.163 Akaike info criterion : 62888.846
Schwarz criterion : 62912.523
------------------------------------------------------------------------------------
Variable Coefficient Std.Error z-Statistic Probability
------------------------------------------------------------------------------------
CONSTANT 70397.9327157 855.6991730 82.2694878 0.0000000
MEAN_AGE 4337.6721310 537.9090592 8.0639507 0.0000000
HOUSE_VALUE 20927.8165549 706.2614165 29.6318276 0.0000000
INTERNET 10643.3244395 580.3422845 18.3397363 0.0000000
lambda 0.5152500 0.0215703 23.8869736 0.0000000
------------------------------------------------------------------------------------
================================ END OF REPORT =====================================