Grootschalige feature-engineering met gevoelige gegevensbescherming met behulp van interactieve AWS Glue-sessies en Amazon SageMaker Studio PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Grootschalige feature-engineering met gevoelige gegevensbescherming met behulp van AWS Glue interactieve sessies en Amazon SageMaker Studio

Organisaties gebruiken machine learning (ML) en AI-services om de klantervaring te verbeteren, de operationele kosten te verlagen en nieuwe mogelijkheden te ontsluiten om de bedrijfsresultaten te verbeteren. Gegevens ondersteunen ML- en AI-use-cases en zijn een strategische aanwinst voor een organisatie. Aangezien data exponentieel groeien, zoeken organisaties naar een geรฏntegreerd, kosteneffectief en performant dataplatform om data voor te verwerken, feature engineering uit te voeren en ML-modellen op schaal te bouwen, trainen en operationaliseren. Om dat te bereiken, biedt AWS een verenigd modern dataplatform dat wordt aangedreven door Amazon eenvoudige opslagservice (Amazon S3) als het datameer met speciaal gebouwde tools en verwerkingsengines om analyses en ML-workloads te ondersteunen. Voor een uniforme ML-ervaring kunt u gebruiken Amazon SageMaker Studio, Die biedt native integratie met AWS Glue interactieve sessies om feature engineering op schaal uit te voeren met bescherming van gevoelige gegevens. In dit bericht laten we zien hoe u deze oplossing kunt implementeren.

Amazon Sage Maker is een volledig beheerde ML-service waarmee u modellen op schaal kunt bouwen, trainen en implementeren voor een breed scala aan gebruiksscenario's. Voor modeltraining kunt u een van de gebruiken ingebouwde algoritmen binnen SageMaker om snel aan de slag te gaan met het trainen en implementeren van ML-modellen.

Een belangrijk onderdeel van het modelbouw- en ontwikkelingsproces is feature engineering. AWS lijm is een van de aanbevolen opties om feature engineering op schaal te realiseren. Met AWS Glue kun je data-integratie en -transformatie op een gedistribueerde manier uitvoeren op een serverloze Apache Spark-infrastructuur, en het maakt het gemakkelijk om de populaire Spark ML-bibliotheek te gebruiken voor feature-engineering en modelontwikkeling. Daarnaast kunt u AWS Glue gebruiken voor incrementele gegevensverwerking door middel van baan bladwijzers, neem gegevens op uit meer dan 100 bronnen met behulp van connectoren, en voer piekerige of onvoorspelbare workloads uit met automatisch schalen.

Een andere belangrijke vereiste voor op ML gebaseerde applicaties is gegevensbeveiliging en toegangscontrole. Het is een algemene eis om strakkere controle te hebben over wie toegang heeft tot de meest gevoelige gegevens als onderdeel van het functie-engineering- en modelbouwproces door het principe van toegang met de minste bevoegdheden te volgen. Om dit te bereiken, kunt u de AWS Glue-integratie gebruiken met AWS Lake-formatie voor beter beheer en beheer van data lake-assets. Met Lake Formation kun je fijnmazige gegevenstoegangscontrole en beveiligingsbeleid configureren bovenop je Amazon S3-datameer. Het beleid wordt op een centrale locatie gedefinieerd, waardoor meerdere analyse- en ML-services mogelijk zijn, zoals AWS Glue, Amazone Athene, en SageMaker, om te communiceren met gegevens die zijn opgeslagen in Amazon S3.

AWS Glue bevat een persoonlijk identificeerbare informatie (PII) detectie transformeren die de mogelijkheid biedt om entiteiten naar behoefte te detecteren, maskeren of verwijderen, voor betere naleving en governance. Met de PII-transformatie kunt u PII-gegevens in datasets detecteren en automatisch fijnmazige toegangscontrole toepassen met behulp van Lake Formation om gevoelige gegevens voor verschillende gebruikersgroepen te beperken.

Gebruik geval

We richten ons op een use-case van een propensity-model dat een dataset voor klantmarketing bevat en waarbij twee gebruikerspersona's betrokken zijn: een data-engineer en een data-wetenschapper. De dataset bevat informatie per klant, waaronder leadbron, contactnotities, functie, enkele vlaggen, paginaweergaven per bezoek en meer. De dataset bevat ook gevoelige informatie zoals persoonlijke telefoonnummers.

De data-engineer is verantwoordelijk voor het bouwen van de end-to-end pijplijn voor gegevensverwerking, inclusief gegevensvoorbereiding, voorverwerking en toegangscontrole. De datawetenschapper is verantwoordelijk voor feature-engineering en training en implementatie van het ML-model. Houd er rekening mee dat de datawetenschapper geen toegang heeft tot gevoelige PII-gegevens voor functie-engineering of het trainen van het ML-model.

Als onderdeel van deze use case bouwt de data-engineer een datapijplijn om de dataset voor te verwerken, scant de dataset op PII-informatie en beperkt de toegang tot de PII-kolom tot de datawetenschapper-gebruiker. Als een datawetenschapper de dataset gebruikt om feature-engineering uit te voeren en ML-modellen te bouwen, heeft hij dus geen toegang tot de PII-gevoelige kolom (in dit geval telefoonnummers). Het feature-engineeringproces omvat het converteren van kolommen van het type string naar een indeling die optimaal is voor ML-modellen. Als geavanceerd gebruiksscenario kunt u dit toegangspatroon uitbreiden om beveiliging op rij- en celniveau te implementeren met behulp van Lake Formation.

Overzicht oplossingen

De oplossing bevat de volgende stappen op hoog niveau:

  1. Resources instellen met AWS CloudFormatie.
  2. Verwerk de dataset, inclusief PII-detectie en fijnmazige toegangscontrole, in een interactieve AWS Glue-sessie.
  3. Functie-engineering uitvoeren op een interactieve AWS Glue-sessie.
  4. Train en implementeer een ML-model met behulp van het ingebouwde XGBoost-algoritme van SageMaker.
  5. Evalueer het ML-model.

Het volgende diagram illustreert de oplossingsarchitectuur.

Voorwaarden

Om deze zelfstudie te voltooien, moet u aan de volgende vereisten voldoen:

Resources instellen met AWS CloudFormation

Dit bericht bevat een CloudFormation-sjabloon voor een snelle installatie. U kunt het bekijken en aanpassen aan uw behoeften. Als u liever bronnen instelt op de AWS-beheerconsole en de AWS CLI in plaats van AWS CloudFormation, zie de instructies in de appendix aan het einde van dit bericht.

De CloudFormation-sjabloon genereert de volgende bronnen:

  • S3-buckets met een voorbeeldgegevensset
  • An AWS Lambda functie om de dataset te laden
  • AWS Identiteits- en toegangsbeheer (IAM) groep, gebruikers, rollen en beleid
  • Lake Formation data lake-instellingen en machtigingen
  • SageMaker-gebruikersprofielen

Voer de volgende stappen uit om uw bronnen te maken:

  1. Meld u aan bij de console.
  2. Kies Start Stack:
    Startknop
  3. Kies Volgende.
  4. Voor DataEngineerPwd en GegevenswetenschapperPwd, voer uw eigen wachtwoord in voor de gebruikers van data-engineers en datawetenschappers.
  5. Voor GlueDatabaseNaam, ga naar binnen demo.
  6. Voor GlueTabelNaam, ga naar binnen web_marketing.
  7. Voor S3BucketNameForInput, ga naar binnen blog-studio-pii-dataset-.
  8. Voor S3BucketNameForOutput, ga naar binnen blog-studio-output-.
  9. Voor SageMakerDomainId, voert u uw SageMaker-domein-ID in die u in de vereiste stappen hebt voorbereid.
  10. Kies Volgende.
  11. Kies op de volgende pagina Volgende.
  12. Bekijk de details op de laatste pagina en selecteer Ik erken dat AWS CloudFormation IAM-bronnen kan creรซren.
  13. Kies creรซren.

Het maken van een stapel kan tot 10 minuten duren. De stack creรซert IAM-rollen en SageMaker-gebruikersprofielen voor twee persona's: data engineer en data scientist. Het creรซert ook een databasedemo en tabel web_marketing met een voorbeelddataset.

Op het moment dat de stapel wordt gemaakt, heeft de data engineer persona volledige toegang tot de tabel, maar de data scientist persona heeft nog geen toegang tot de tabel.

Bewerk de dataset voor

Laten we beginnen met het voorbewerken van gegevens in een interactieve AWS Glue-sessie. De data engineer persona wil de data verifiรซren om te zien of er gevoelige data zijn of niet, en minimale toegangsrechten verlenen aan de data scientist persona. U kunt notebook downloaden van deze locatie.

  1. Meld u aan bij de console met de data-engineer-gebruiker.
  2. Kies op de SageMaker-console Gebruikers.
  3. Selecteer de data-engineer-gebruiker en kies Studio openen.
  4. Maak een nieuw notitieboek en kies SparkAnalytics 1.0 For Beeld en Lijm PySpark For pit.
  5. Start een interactieve sessie met de volgende magie om de nieuwere versie van Boto3 te installeren (dit is vereist voor het gebruik van de create_data_cells_filter methode):
    %additional_python_modules boto3==1.24.82

  6. Initialiseer de sessie:
    import boto3
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    
    sc = SparkContext.getOrCreate()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)

  7. Maak een AWS Glue DynamicFrame van de nieuw gemaakte tabel, en keuzetypes oplossen gebaseerd op catalogusschema, omdat we het schema willen gebruiken dat in de catalogus is gedefinieerd in plaats van het automatisch afgeleide schema op basis van gegevens:
    dyf_marketing = glueContext.create_dynamic_frame.from_catalog(
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing_resolved = dyf_marketing.resolveChoice(
    choice="match_catalog",
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing_resolved.printSchema()

  8. Valideer in de tabel of er PII-gegevens zijn met behulp van AWS Glue PII-detectie:
    from awsglueml.transforms import EntityDetector
    
    entities_filter = [
    "EMAIL",
    "CREDIT_CARD",
    "IP_ADDRESS",
    "MAC_ADDRESS",
    "PHONE_NUMBER"
    ]
    entity_detector = EntityDetector()
    classified_map = entity_detector.classify_columns(dyf_marketing_resolved, entities_filter, 1.0, 0.1)
    print(classified_map)

  9. Controleer of de kolommen die zijn geclassificeerd als PII gevoelige gegevens bevatten of niet (zo niet, werk geclassificeerd_map bij om de niet-gevoelige kolommen te verwijderen):
    from pyspark.sql.functions import col
    dyf_marketing_resolved.toDF().select(*[col(c) for c in classified_map.keys()]).show()

  10. Stel machtigingen voor Lake Formation in met behulp van een datacelfilter voor automatisch gedetecteerde kolommen en beperk de kolommen tot de datawetenschapper-persona:
    lakeformation = boto3.client('lakeformation')
    sts = boto3.client('sts')
    
    account_id = sts.get_caller_identity().get('Account')
    
    # Create a data cell filter for excluding phone_number column
    lakeformation.create_data_cells_filter(
    TableData={
    'TableCatalogId': account_id,
    'DatabaseName': 'demo',
    'TableName': 'web_marketing',
    'Name': 'pii',
    'RowFilter': {
    'AllRowsWildcard': {}
    
    },
    'ColumnWildcard': {
    'ExcludedColumnNames': list(classified_map.keys())
    }
    }
    )
    
    # Grant permission on the data cell filter
    lakeformation.grant_permissions(
    Principal={
    'DataLakePrincipalIdentifier': f'arn:aws:iam::{account_id}:role/SageMakerStudioExecutionRole_data-scientist'
    },
    Resource={
    'DataCellsFilter': {
    'TableCatalogId': account_id,
    'DatabaseName': 'demo',
    'TableName': 'web_marketing',
    'Name': 'pii'
    }
    },
    Permissions=[
    'SELECT'
    ]
    )

  11. Log in bij Studio als data-scientist om te zien dat de PII-kolommen niet zichtbaar zijn. U kunt notebook downloaden van deze locatie.
  12. Maak een nieuw notitieboek en kies SparkAnalytics 1.0 For Beeld en Lijm PySpark For pit:
    import boto3
    import sys
    from awsglue.transforms import *
    from awsglue.utils import getResolvedOptions
    from pyspark.context import SparkContext
    from awsglue.context import GlueContext
    from awsglue.job import Job
    
    sc = SparkContext.getOrCreate()
    glueContext = GlueContext(sc)
    spark = glueContext.spark_session
    job = Job(glueContext)
    
    dyf_marketing = glueContext.create_dynamic_frame.from_catalog(
    database="demo",
    table_name="web_marketing"
    )
    
    dyf_marketing.printSchema()

Functie-engineering uitvoeren

We gebruiken de Apache Spark ML-bibliotheek om feature-engineering uit te voeren als de data-scientist-gebruiker en schrijven vervolgens de uitvoer terug naar Amazon S3.

  1. In de volgende cel passen we functies toe uit de Apache Spark ML-bibliotheek:
    • StringIndexer wijst een tekenreekskolom met labels toe aan een kolom met labelindexen.
    • OneHotEncoder wijst een categorisch kenmerk, weergegeven als een labelindex, toe aan een binaire vector met maximaal รฉรฉn enkele waarde die de aanwezigheid van een specifiek categorisch kenmerk aangeeft. Deze transformatie wordt gebruikt voor ML-algoritmen die continue functies verwachten.
    • VectorAssembler is een transformator die een gegeven lijst met kolommen combineert tot een enkele vectorkolom, die vervolgens wordt gebruikt bij het trainen van ML-modellen voor algoritmen zoals logistische regressie en beslissingsbomen.
    #feature engineering by using string indexer and one hot encoding from spark ML library
    from pyspark.ml.feature import StringIndexer, VectorIndexer, OneHotEncoder, VectorAssembler
    from pyspark.ml import Pipeline
    
    cols = ['lastcampaignactivity','region','viewedadvertisement','usedpromo','jobrole']
    
    int_cols = ['pageviewspervisit','totaltimeonwebsite','totalwebvisits',]
    
    indexers = [
    StringIndexer(inputCol=c, outputCol="{0}_indexed".format(c))
    for c in cols
    ]
    
    encoders = [
    OneHotEncoder(
    inputCol=indexer.getOutputCol(),
    outputCol="{0}_encoded".format(indexer.getOutputCol()))
    for indexer in indexers
    ]
    
    assembler = VectorAssembler(
    inputCols=[encoder.getOutputCol() for encoder in encoders]+int_cols,
    outputCol="features"
    )

  2. Het uiteindelijke getransformeerde DataFrame kan worden gemaakt met behulp van de Pipeline-bibliotheek. Een pijplijn wordt gespecificeerd als een opeenvolging van fasen. Deze fasen worden op volgorde uitgevoerd en de invoer DataFrame wordt getransformeerd terwijl deze door elke fase gaat.
    df_marketing = dyf_marketing.toDF()
    pipeline = Pipeline(stages=indexers + encoders + [assembler])
    df_tfm=pipeline.fit(df_marketing).transform(df_marketing)
    

  3. Vervolgens splitsen we de dataset op in DataFrame trainen, valideren en testen en opslaan in de S3-bucket om het ML-model te trainen (geef uw AWS-account-ID op in de volgende code):
    from pyspark.ml.functions import vector_to_array
    
    #set s3 output location for feature engineering output
    bucket='blog-studio-output-'
    
    #convert sparse to dense vector
    df_tfm=df_tfm.select('converted',vector_to_array("features").alias("features_array"))
    
    #split features array into individual columns
    df_tfm=df_tfm.select([df_tfm.converted] + [df_tfm.features_array[i] for i in range(17)])
    
    #split the overall dataset into 70-20-10 training , validation and test
    (train_df, validation_df, test_df) = df_tfm.randomSplit([0.7,0.2,0.1])
    
    #write back train, validation and test datasets to S3
    train_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/training/'.format(bucket))
    
    validation_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/validation/'.format(bucket))
    
    test_df.write
    .option("header","false")
    .csv('s3://{}/web-marketing/processed/test/'.format(bucket))

Train en implementeer een ML-model

In het vorige gedeelte hebben we feature-engineering voltooid, waaronder het converteren van tekenreekskolommen zoals region, jobrole en usedpromo naar een indeling die optimaal is voor ML-modellen. We hebben ook kolommen opgenomen zoals pageviewspervisit en totalwebvisits, waarmee we de neiging van een klant om een โ€‹โ€‹product te kopen kunnen voorspellen.

We trainen nu een ML-model door de trein- en validatiegegevensset te lezen met behulp van het ingebouwde XGBoost-algoritme van SageMaker. Vervolgens implementeren we het model en voeren we een nauwkeurigheidscontrole uit. U kunt notebook downloaden van deze locatie.

In de volgende cel lezen we gegevens uit de tweede S3-bucket, die de uitvoer bevat van onze feature engineering-activiteiten. Vervolgens gebruiken we het ingebouwde algoritme XGBoost om het model te trainen.

  1. Open een nieuw notitieblok. Kiezen data Science For Beeld en Python 3 For pit (geef uw AWS-account-ID op in de volgende code):
    #set s3 bucket location for training data
    import sagemaker
    import boto3
    from sagemaker import get_execution_role
    
    container = sagemaker.image_uris.retrieve(region=boto3.Session().region_name,
    framework='xgboost', version='latest')
    bucket='blog-studio-output-'
    prefix='web-marketing/processed'
    
    #read train and validation input datasets
    s3_input_train = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/training/'
    .format(bucket, prefix), content_type='csv')
    s3_input_validation = sagemaker.inputs.TrainingInput(s3_data='s3://{}/{}/validation/'
    .format(bucket, prefix), content_type='csv')
    
    #train xgb model
    sess = sagemaker.Session()
    from sagemaker import get_execution_role
    
    xgb = sagemaker.estimator.Estimator(
    container,
    role=get_execution_role(),
    instance_count=1,
    instance_type='ml.m4.xlarge',
    output_path='s3://{}/{}/output'
    .format(bucket, prefix),
    sagemaker_session=sess
    )
    
    xgb.set_hyperparameters(
    max_depth=5,
    eta=0.2,
    gamma=4,
    min_child_weight=6,
    subsample=0.8,
    silent=0,
    objective='binary:logistic',
    num_round=100
    )
    
    xgb.fit({'train': s3_input_train, 'validation': s3_input_validation})

  2. Wanneer de training is voltooid, kunnen we het model implementeren met behulp van SageMaker-hostingservices:
    #deploy ml model
    xgb_predictor = xgb.deploy(initial_instance_count=1,
    instance_type='ml.m4.xlarge')

Evalueer het ML-model

We gebruiken de testdataset om het model te evalueren en verwijderen het deductie-eindpunt wanneer we klaar zijn om lopende kosten te voorkomen.

  1. Evalueer het model met de volgende code:
    #create csv serialiser to run accuracy on test dataset
    xgb_predictor.serializer = sagemaker.serializers.CSVSerializer()
    
    #read test dataset
    import io
    import pandas as pd
    
    s3 = boto3.resource('s3')
    bucket_obj = s3.Bucket(bucket)
    
    test_line = []
    test_objs = bucket_obj.objects.filter(Prefix="web-marketing/processed/test")
    for obj in test_objs:
    try:
    key = obj.key
    body = obj.get()['Body'].read()
    temp = pd.read_csv(io.BytesIO(body),header=None, encoding='utf8',sep=',')
    test_line.append(temp)
    except:
    continue
    
    test_df = pd.concat(test_line)
    
    #predict results using deployed model
    import numpy as np
    def predict(data, predictor, rows=500 ):
    split_array = np.array_split(data, int(data.shape[0] / float(rows) + 1))
    predictions = ''
    for array in split_array:
    predictions = ','.join([predictions, predictor.predict(array).decode('utf-8')])
    return np.fromstring(predictions[1:], sep=',')
    
    #drop the target variable in test_df and make prediction
    predictions = predict(test_df.drop(test_df.columns[0], axis=1).to_numpy(), xgb_predictor)
    
    #calculate accuracy using sklearn library
    from sklearn.metrics import accuracy_score, confusion_matrix
    y_pred=np.round(predictions)
    y_true=test_df.iloc[:,0].values.tolist()
    print('Accuracy score: ',accuracy_score(y_true, y_pred))
    print('Confusion matrix: n',confusion_matrix(y_true, y_pred))

    Het nauwkeurigheidsresultaat voor de monsterrun was 84.6 %. Dit kan iets anders zijn voor uw run vanwege de willekeurige splitsing van de dataset.

  2. We kunnen het inferentie-eindpunt verwijderen met de volgende code:
    xgb_predictor.delete_endpoint(delete_endpoint_config=True)

Opruimen

Nu naar de laatste stap, het opruimen van de middelen.

  1. Maak de twee buckets leeg die zijn gemaakt via de CloudFormation-stack.
  2. Verwijder de apps die aan de gebruiker zijn gekoppeld profiles data-scientist en data-engineer binnen Studio.
  3. Verwijder de CloudFormation-stack.

Conclusie

In dit bericht hebben we een oplossing gedemonstreerd waarmee persona's zoals data-engineers en data-wetenschappers op grote schaal feature-engineering kunnen uitvoeren. Met interactieve AWS Glue-sessies kunt u gemakkelijk feature-engineering op schaal bereiken met automatische PII-detectie en fijnmazige toegangscontrole zonder dat u enige onderliggende infrastructuur hoeft te beheren. Door Studio als het enige toegangspunt te gebruiken, krijgt u een vereenvoudigde en geรฏntegreerde ervaring om een โ€‹โ€‹end-to-end ML-workflow op te bouwen: van het voorbereiden en beveiligen van gegevens tot het bouwen, trainen, afstemmen en implementeren van ML-modellen. Ga voor meer informatie naar Aan de slag met AWS Glue interactieve sessies en Amazon SageMaker Studio.

We zijn erg enthousiast over deze nieuwe mogelijkheid en zijn benieuwd wat je ermee gaat bouwen!


Bijlage: Resources instellen via de console en de AWS CLI

Volg de instructies in dit gedeelte om bronnen in te stellen met behulp van de console en AWS CLI in plaats van de CloudFormation-sjabloon.

Voorwaarden

Om deze tutorial te voltooien, moet u toegang hebben tot de AWS CLI (zie Aan de slag met de AWS CLI) of gebruik opdrachtregeltoegang vanaf AWS-cloudshell.

IAM-groep, gebruikers, rollen en beleid configureren

In deze sectie maken we twee IAM-gebruikers aan: data-engineer en data-scientist, die behoren tot de IAM-groep data-platform-groep. Vervolgens voegen we een enkel IAM-beleid toe aan de IAM-groep.

  1. Op de IAM-console, maak een beleid op het tabblad JSON om een โ€‹โ€‹nieuw door IAM beheerd beleid te maken met de naam DataPlatformGroupPolicy. Het beleid geeft gebruikers in de groep toegang tot Studio, maar alleen met een SageMaker-gebruikersprofiel met een tag die overeenkomt met hun IAM-gebruikersnaam. Gebruik het volgende JSON-beleidsdocument om machtigingen te verlenen:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles",
                "sagemaker:ListApps"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioReadOnly"
          },
          {
             "Action":"sagemaker:AddTags",
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAddTags"
          },
          {
             "Condition":{
                "StringEquals":{
                   "sagemaker:ResourceTag/studiouserid":"${aws:username}"
                }
             },
             "Action":[
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeUserProfile"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAllowedUserProfile"
          },
          {
             "Condition":{
                "StringNotEquals":{
                   "sagemaker:ResourceTag/studiouserid":"${aws:username}"
                }
             },
             "Action":[
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeUserProfile"
             ],
             "Resource":"*",
             "Effect":"Deny",
             "Sid":"AmazonSageMakerDeniedUserProfiles"
          }
       ]
    }

  2. Maak een IAM-groep Dit betekent dat we onszelf en onze geliefden praktisch vergiftigen. data-platform-group.
  3. Zoek en koppel het door AWS beheerde beleid met de naam DataPlatformGroupPolicy aan de groep.
  4. Maak IAM-gebruikers aan genaamd data-engineer en data-scientist onder de IAM-groep data-platform-groep.
  5. Maak een nieuw beheerd beleid met de naam SageMakerExecutionPolicy (geef uw regio en account-ID op in de volgende code):
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "sagemaker:DescribeDomain",
                "sagemaker:ListDomains",
                "sagemaker:ListUserProfiles",
                "sagemaker:ListApps"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioReadOnly"
          },
          {
             "Action":"sagemaker:AddTags",
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAddTags"
          },
          {
             "Action":[
                "sagemaker:CreateTrainingJob",
                "sagemaker:DescribeTrainingJob",
                "logs:DescribeLogStreams",
                "sagemaker:CreateModel",
                "sagemaker:CreateEndpointConfig",
                "sagemaker:CreateEndpoint",
                "sagemaker:DescribeEndpoint",
                "sagemaker:InvokeEndpoint",
                "sagemaker:DeleteEndpointConfig",
                "sagemaker:DeleteEndpoint"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerTrainingAndDeploy"
          },
          {
             "Action":"sagemaker:*App",
             "Resource":"arn:aws:sagemaker:::app/*/${aws:PrincipalTag/userprofilename}/*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerAllowedApp"
          },
          {
             "Action":"sagemaker:*App",
             "Effect":"Deny",
             "NotResource":"arn:aws:sagemaker:::app/*/${aws:PrincipalTag/userprofilename}/*",
             "Sid":"AmazonSageMakerDeniedApps"
          },
          {
             "Action":[
                "glue:GetTable",
                "glue:GetTables",
                "glue:SearchTables",
                "glue:GetDatabase",
                "glue:GetDatabases",
                "glue:GetPartition",
                "glue:GetPartitions"
             ],
             "Resource":[
                "arn:aws:glue:::table/demo/*",
                "arn:aws:glue:::database/demo",
                "arn:aws:glue:::catalog"
             ],
             "Effect":"Allow",
             "Sid":"GlueCatalogPermissions"
          },
          {
             "Action":[
                "lakeformation:GetDataAccess",
                "lakeformation:StartQueryPlanning",
                "lakeformation:GetQueryState",
                "lakeformation:GetWorkUnits",
                "lakeformation:GetWorkUnitResults"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"LakeFormationPermissions"
          },
          {
             "Effect":"Allow",
             "Action":[
                "s3:CreateBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:ListBucket",
                "s3:DeleteObject"
             ],
             "Resource":[
                "arn:aws:s3:::blog-studio-output-",
                "arn:aws:s3:::blog-studio-output-/*"
             ]
          },
          {
             "Action":[
                "iam:PassRole",
                "iam:GetRole",
                "sts:GetCallerIdentity"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"AmazonSageMakerStudioIAMPassRole"
          },
          {
             "Action":"sts:AssumeRole",
             "Resource":"*",
             "Effect":"Deny",
             "Sid":"DenyAssummingOtherIAMRoles"
          }
       ]
    }

  6. Maak een nieuw beheerd beleid genoemd SageMakerAdminPolicy:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Action":[
                "lakeformation:GrantPermissions",
                "lakeformation:RevokePermissions",
                "lakeformation:ListPermissions",
                "lakeformation:BatchGrantPermissions",
                "lakeformation:BatchRevokePermissions",
                "lakeformation:CreateDataCellsFilter",
                "lakeformation:DeleteDataCellsFilter",
                "lakeformation:ListDataCellsFilter",
                "glue:GetUserDefinedFunctions",
                "glue:BatchGetCustomEntityTypes"
             ],
             "Resource":"*",
             "Effect":"Allow",
             "Sid":"GlueLakeFormationPermissions"
          }
       ]
    }

  7. Maak een IAM-rol voor SageMaker voor de data-engineer (data-engineer), die wordt gebruikt als de uitvoerende rol van het overeenkomstige gebruikersprofiel. Op de Voeg machtigingsbeleid toe pagina, is AmazonSageMakerFullAccess (door AWS beheerd beleid) standaard bijgevoegd. U verwijdert dit beleid later om het minimale recht te behouden.
    1. Voor Rol naam, gebruik de naamgevingsconventie die aan het begin van deze sectie is geรฏntroduceerd om de rol SageMakerStudioExecutionRole_data-engineer te noemen.
    2. Voor Tags, voeg de sleutel userprofilename en de waarde data-engineer toe.
    3. Kies Rol creรซren.
    4. Om de resterende beleidsregels toe te voegen, op het rollen pagina, kies de rolnaam die u zojuist hebt gemaakt.
    5. Onder machtigingen, verwijder het beleid AmazonSageMakerFullAccess.
    6. Op de Voeg machtigingsbeleid toe pagina, selecteert u het door AWS beheerde beleid AwsGlueSessionUserRestrictedServiceRole en het door de klant beheerde beleid SageMakerExecutionPolicy en SageMakerAdminPolicy dat u hebt gemaakt.
    7. Kies Voeg beleid toe.
    8. wijzigen de vertrouwensrelatie van uw rol:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

  8. Maak een IAM-rol voor SageMaker voor de datawetenschapper (datawetenschapper), die wordt gebruikt als de uitvoerende rol van het overeenkomstige gebruikersprofiel.
    1. Voor Rol naam, noem de rol SageMakerStudioExecutionRole_data-scientist.
    2. Voor Tags, voeg de sleutel gebruikersprofielnaam en de waarde data-scientist toe.
    3. Kies Rol creรซren.
    4. Om de resterende beleidsregels toe te voegen, op het rollen pagina, kies de rolnaam die u zojuist hebt gemaakt.
    5. Onder machtigingen, verwijder het beleid AmazonSageMakerFullAccess.
    6. Op de Voeg machtigingsbeleid toe pagina, selecteert u het door AWS beheerde beleid AwsGlueSessionUserRestrictedServiceRole en het door de klant beheerde beleid SageMakerExecutionPolicy dat u hebt gemaakt.
    7. Kies Voeg beleid toe.
    8. wijzigen de vertrouwensrelatie van uw rol:
    {
       "Version":"2012-10-17",
       "Statement":[
          {
             "Effect":"Allow",
             "Principal":{
                "Service":[
                   "glue.amazonaws.com",
                   "sagemaker.amazonaws.com"
                ]
             },
             "Action":"sts:AssumeRole"
          }
       ]
    }

Configureer SageMaker-gebruikersprofielen

Om uw SageMaker-gebruikersprofielen te maken met de studiouserid tag, voert u de volgende stappen uit:

  1. Gebruik de AWS CLI of CloudShell om het Studio-gebruikersprofiel voor de data-engineer te maken (geef uw account-ID en Studio-domein-ID op in de volgende code):
    aws sagemaker create-user-profile --domain-id  --user-profile-name data-engineer --tags Key=studiouserid,Value=data-engineer --user-settings ExecutionRole=arn:aws:iam:::role/SageMakerStudioExecutionRole_data-engineer

  2. Herhaal de stap om een โ€‹โ€‹gebruikersprofiel aan te maken voor de datawetenschapper en vervang de account-ID en Studio-domein-ID:
    aws sagemaker create-user-profile --domain-id  --user-profile-name data-scientist --tags Key=studiouserid,Value=data-scientist --user-settings ExecutionRole=arn:aws:iam:::role/SageMakerStudioExecutionRole_data-scientist

Maak S3-buckets en upload de voorbeelddataset

In deze sectie maakt u twee S3-buckets. De eerste bucket heeft een voorbeelddataset met betrekking tot webmarketing. De tweede bucket wordt door de datawetenschapper gebruikt om de output van feature engineering-taken op te slaan, en deze output-dataset wordt gebruikt om het ML-model te trainen.

Maak eerst de S3-bucket voor de invoergegevens:

  1. Downloaden de gegevensset.
  2. Kies op de Amazon S3-console Emmers in het navigatievenster.
  3. Kies Maak een bucket.
  4. Voor Regio, kies de regio met het SageMaker-domein dat de gebruikersprofielen bevat die u hebt gemaakt.
  5. Voor Bucketnaam, ga naar binnen blog-studio-pii-dataset-.
  6. Kies Maak een bucket.
  7. Selecteer de bucket die je hebt gemaakt en kies Uploaden.
  8. In het Selecteer bestanden sectie, kies Bestanden toevoegen en upload de dataset die u hebt gedownload.
    Nu maakt u de bucket voor de uitvoergegevens:
  9. Op de Emmers pagina, kies Maak een bucket.
  10. Voor Regio, kies de regio met het SageMaker-domein dat de gebruikersprofielen bevat die u hebt gemaakt.
  11. Voor Bucketnaam, ga naar binnen blog-studio-output-.
  12. Kies Maak een bucket.

Maak een AWS Glue-database en -tabel

In deze sectie maakt u een AWS Glue-database en -tabel voor de dataset.

  1. Op de Lake Formation-console, onder Data catalogus in het navigatievenster, kies databases.
  2. Kies Voeg database toe.
  3. Voor Naam, voer demo in.
  4. Kies Maak een database.
  5. Onder Data catalogus, kiezen Tafels.
  6. Voor Naam, ga naar binnen web_marketing.
  7. Voor Databaseselecteer demo.
  8. Voor Inclusief pad, voer het pad van uw S3-bucket in voor invoergegevens.
  9. Voor Classificatie, kiezen CSV.
  10. Onder Schema, kiezen Schema uploaden.
  11. Voer de volgende JSON-array in het tekstvak in:
    [
       {
          "Name":"lastcampaignactivity",
          "Type":"string"
       },
       {
          "Name":"pageviewspervisit",
          "Type":"double"
       },
       {
          "Name":"totaltimeonwebsite",
          "Type":"bigint"
       },
       {
          "Name":"totalwebvisits",
          "Type":"bigint"
       },
       {
          "Name":"attendedmarketingevent",
          "Type":"string"
       },
       {
          "Name":"organicsearch",
          "Type":"string"
       },
       {
          "Name":"viewedadvertisement",
          "Type":"string"
       },
       {
          "Name":"leadsource",
          "Type":"string"
       },
       {
          "Name":"jobrole",
          "Type":"string"
       },
       {
          "Name":"contactnotes",
          "Type":"string"
       },
       {
          "Name":"leadprofile",
          "Type":"string"
       },
       {
          "Name":"usedpromo",
          "Type":"string"
       },
       {
          "Name":"donotreachout",
          "Type":"boolean"
       },
       {
          "Name":"city",
          "Type":"string"
       },
       {
          "Name":"converted",
          "Type":"bigint"
       },
       {
          "Name":"region",
          "Type":"string"
       },
       {
          "Name":"phone_number",
          "Type":"string"
       }
    ]

  12. Kies Uploaden.
  13. Kies Verzenden.
  14. Onder Tabeldetails, kiezen Tabel bewerken.
  15. Onder Tabel eigenschappen, kiezen Toevoegen.
  16. Voor sleutel, ga naar binnen skip.header.line.countEn voor Waarde, voer 1 in.
  17. Kies Bespaar.

Configureer Lake Formation-machtigingen

In deze sectie stelt u Lake Formation-machtigingen in om de IAM-rol toe te staan SageMakerStudioExecutionRole_data-engineer om een โ€‹โ€‹database aan te maken en de S3-locatie binnen Lake Formation te registreren.

Registreer eerst de data lake-locatie om tabellen te beheren onder de locatie in Lake Formation-machtigingen:

  1. Kies Data Lake-locaties.
  2. Kies Registreer locatie.
  3. Voor Amazon S3-pad, ga naar binnen s3://blog-studio-pii-dataset-/ (de bucket die de dataset bevat).
  4. Kies Registreer locatie.
    Nu verleent u Lake Formation-database- en tabelmachtigingen aan de IAM-rollen SageMakerStudioExecutionRole_data-engineer en SageMakerStudioExecutionRole_data-scientist.Verleen eerst databasetoestemming voor SageMakerStudioExecutionRole_data-engineer:
  5. Onder machtigingen, kiezen Data lake-machtigingen.
  6. Onder Gegevenstoestemming, kiezen Grant.
  7. Voor opdrachtgevers, kiezen IAM-gebruikers en -rollenen selecteer de rol SageMakerStudioExecutionRole_data-engineer.
  8. Voor Beleidstags of catalogusbronnen, kiezen Benoemde gegevenscatalogusbronnen.
  9. Voor databases, kies demo.
  10. Voor Databaserechten, kiezen Super.
  11. Kies Grant.
    Verleen vervolgens tafelrechten voor SageMakerStudioExecutionRole_data-engineer:
  12. Onder Gegevenstoestemming, kiezen Grant.
  13. Voor opdrachtgevers, kiezen IAM-gebruikers en -rollenen selecteer de rol SageMakerStudioExecutionRole_data-engineer.
  14. Voor Beleidstags of catalogusbronnen, kiezen Benoemde gegevenscatalogusbronnen.
  15. Voor databases, kiezen demo.
  16. Voor Tafels, kiezen web_marketing.
  17. Voor tafel rechten, kiezen Super.
  18. Voor Toekenbaar rechten, kiezen Super.
  19. Kies Grant.
    Verleen ten slotte databasetoestemming voor SageMakerStudioExecutionRole_data-scientist:
  20. Onder Gegevenstoestemming, kiezen Grant.
  21. Voor opdrachtgevers, kiezen IAM-gebruikers en -rollenen selecteer de rol SageMakerStudioExecutionRole_data-scientist.
  22. Voor Beleidstags of catalogusbronnen, kiezen Benoemde gegevenscatalogusbronnen.
  23. Voor databases, kiezen demo.
  24. Voor Databaserechten, kiezen Beschrijven.
  25. Kies Grant.

Over de auteurs

Grootschalige feature-engineering met gevoelige gegevensbescherming met behulp van interactieve AWS Glue-sessies en Amazon SageMaker Studio PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Praveen Kumar is een Analytics Solution Architect bij AWS met expertise in het ontwerpen, bouwen en implementeren van moderne data- en analyseplatforms met behulp van cloud-native services. Zijn interessegebieden zijn serverloze technologie, moderne datawarehouses in de cloud, streaming en ML-applicaties.

Grootschalige feature-engineering met gevoelige gegevensbescherming met behulp van interactieve AWS Glue-sessies en Amazon SageMaker Studio PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Noritaka Sekiyama is een Principal Big Data Architect in het AWS Glue-team. Hij werkt graag samen met verschillende teams om resultaten zoals deze post te leveren. In zijn vrije tijd speelt hij graag videogames met zijn gezin.

Tijdstempel:

Meer van AWS-machine learning