modelPublishing copyModelExternal

Cas Limite : Protection contre l'écrasement accidentel (Maintenance)

Scénario de test & Cas d'usage

Contexte Métier

Sur une ligne de production, un modèle de détection de panne est critique. On veut s'assurer qu'un Data Scientist ne puisse pas écraser par erreur le modèle de production 'GOLD' sans une action explicite. On teste ici le mécanisme de sécurité de l'option 'replace'.
Préparation des Données

Entraînement d'une régression linéaire simple pour la maintenance prédictive.

Copié !
1PROC CAS;
2 dataStep.runCode / code="data casuser.iot_sensors; do i=1 to 100; vibration=rand('uniform'); temperature=rand('normal', 100, 10); output; end; run;";
3 regression.glm / TABLE={name="iot_sensors", caslib="casuser"} model={depVars={"temperature"}, effects={"vibration"}} store={name="iot_model_prod", caslib="casuser", replace=true};
4RUN;

Étapes de réalisation

1
Première publication : Initialisation du modèle (Doit réussir).
Copié !
1PROC CAS;
2 modelPublishing.copyModelExternal /
3 modelTable={name="iot_model_prod", caslib="casuser"}
4 modelName="prod_maintenance_v1"
5 externalCaslib="casuser"
6 externalOptions={extType="FILESYSTEM", modelDir="/tmp/prod_iot/"}
7 modelOptions={replace=true};
8RUN;
2
Seconde publication : Tentative d'écrasement avec replace=FALSE (Doit échouer).
Copié !
1PROC CAS;
2 modelPublishing.copyModelExternal /
3 modelTable={name="iot_model_prod", caslib="casuser"}
4 modelName="prod_maintenance_v1"
5 externalCaslib="casuser"
6 externalOptions={extType="FILESYSTEM", modelDir="/tmp/prod_iot/"}
7 modelOptions={replace=false};
8RUN;

Résultat Attendu


L'étape 1 doit réussir. L'étape 2 doit retourner une ERREUR ou un avertissement sévère indiquant que le modèle 'prod_maintenance_v1' existe déjà dans la destination et ne peut pas être remplacé (car replace=FALSE).