paint-brush
Tuş Vuruşu Dinamiği — Kullanıcıyı Tahmin Etme — Lambda Uygulamasıile@tudoracheabogdan
453 okumalar
453 okumalar

Tuş Vuruşu Dinamiği — Kullanıcıyı Tahmin Etme — Lambda Uygulaması

ile Bogdan Tudorache8m2023/10/22
Read on Terminal Reader

Çok uzun; Okumak

Bu makale, kullanıcı tanımlamaya yönelik davranışsal biyometri biçimi olarak tuş vuruşu dinamiklerinin kullanımını ele almaktadır. Makale, makine öğrenimi modellerini kullanarak, her bireyin benzersiz yazma stilinin (özellikle tuşa basma ve tuşa basma etkinliklerinin) kimliği doğrulamak için nasıl kullanılabileceğini araştırıyor. Bu makine öğrenimi modellerinin kullanıcı kimlik doğrulaması ve tahmini için gerçek dünya senaryolarında nasıl uygulanabileceğini öğrenin.
featured image - Tuş Vuruşu Dinamiği — Kullanıcıyı Tahmin Etme — Lambda Uygulaması
Bogdan Tudorache HackerNoon profile picture
0-item
1-item
2-item

Bu makalenin makine öğrenimi modellerinde kullanıcı tanıma için kullanılan tuş vuruşu dinamikleri davranışsal biyometridir. Tuş vuruşu dinamikleri, her kişinin kimliğini doğrulamak için yazdığı farklı yöntemi kullanır. Bu, Tuşa Basma ve Tuş Bırakma sırasındaki 2 tuş vuruşu olayının analiz edilmesiyle gerçekleştirilir; bunlar, bilgisayar klavyelerinde yazma kalıplarını çıkarmak için bir tuş vuruşunu oluşturur. Makale, bu ML Modellerinin gerçek hayattaki durumlarda bir kullanıcıyı tahmin etmek için nasıl kullanılabileceğini inceleyecektir.


Önceki makalede, aynı metni 12 kez yazması istenen 100 kullanıcıdan gelen +880 klavye girişi kümesinde 3 ML modelini nasıl eğitebileceğimiz açıklanıyordu.


Gerçek hayattaki bir durumu simüle etmek için kullanacağımız uygulamalar.

Gerçek hayattaki bir durumu simüle etmek


Mimarlık

Sandbox : Gerçek hayat senaryolarını test etmek için kullanacağız Postacı + Şişe .


Üretim : Bu uygulamayı üretime taşımak istediğimizde, Flask kodunun bitlerini basit bir kodla değiştirebiliriz. AWS Lambda'sı .


Flask, Lambda + API Ağ Geçidini kopyalamak için kullanabileceğimiz bir web çerçevesidir.


Lambda, AWS'de barındırılan ve çeşitli dillerde yazılmış olay odaklı kodları çalıştırabilen sunucusuz bir web hizmetidir ancak bu uygulama için python kullanacağız.


Veri akışı şöyledir:

  1. Başlığa kimlik verilerini ve kullanmak istediğimiz modeli yüklüyoruz, bu temelde bizim json yükümüzdür. Başlığa ayrıca yetkilendirme anahtarını da ekleyeceğiz (yalnızca Prod)
  2. Flask Uygulamasına/API Ağ Geçidine HTTP POST yöntemi isteğinde bulunuyoruz
  3. API Gateway, yetkilendirme anahtarını (api anahtarı) kontrol eder ve isteği kabul ederse veri yükünü işlenmek üzere Lambda'ya gönderir.
  4. FlaskApp/Lambda temel kodu çalıştırır
  5. Etkinlik başarılıysa dönüş gövdesinde elde ettiğimiz şey tahmin edilen kullanıcının kimliğidir, aksi takdirde bir hata mesajı alırız


Yüksek Seviyeye Genel Bakış


Mimariye + veri akışına üst düzey genel bakış


Daha önce de belirtildiği gibi Github proje sayfasında bulabileceğiniz tüm kodlar:

https://github.com/BogdanAlinTudorache/KeystrokeDynamics


Postacı isteği

Çiğ

 { "info": { "_postman_id": "c62ddbda-e487-432f-998a-4dfc9313f0fa", "name": "BogdanTudorache", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, "item": [ { "name": "predict_user", "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\n \"Model\": \"RF\",\n \"HT\": {\n \"Mean\": 48.43,\n \"STD\": 23.34\n },\n \"PPT\": {\n \"Mean\": 120.43,\n \"STD\": 37.41\n },\n \"RRT\": {\n \"Mean\": 124.43,\n \"STD\": 45.34\n },\n \"RPT\": {\n \"Mean\": 132.56,\n \"STD\": 47.12\n }\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "http://127.0.0.1:5000", "protocol": "http", "host": [ "127", "0", "0", "1" ], "port": "5000" } }, "response": [] } ] }


Dosyayı GitHub'dan indirebilirsiniz.

Vücut

 { "Model": "RF", "HT": { "Mean": 48.43, "STD": 23.34 }, "PPT": { "Mean": 120.43, "STD": 37.41 }, "RRT": { "Mean": 124.43, "STD": 45.34 }, "RPT": { "Mean": 132.56, "STD": 47.12 } }


Flask Uygulaması / Lambda Uygulaması

Her şeyi AWS'ye taşımadan önce süreci korumalı alanda test etmek istiyorsak Flask'ı kullanarak uçtan uca bir çağrıyı çoğaltmamız gerekir.

Flask Uygulaması nasıl başlatılır?

GitHub'da flask_lambda_function.py'nin tam sürümünü bulacaksınız ve herhangi bir IDE'de flask uygulamasını otomatik olarak başlatacağından betiği çalıştırmanız yeterlidir.


Benim durumumda IntelliJ Idea kullanıyorum, bu yüzden betiği çalıştırıyorum (sağ tıklayın → çalıştır):

IDE

Gerçek hayattaki bir senaryoyu test etme

IDE'nin alt kısmında komut dosyası başlatıldığında, web hizmetinin localhost ve bağlantı noktası 5000'de başladığını bildiren python konsolunu göreceksiniz (bunun varsayılan olduğunu düşünüyorum ancak bu da yapılandırılabilir).

İstekleri bekleyen Flask uygulamasına sahip Python konsolu


Artık her POST HTTP isteği yaptığımızda, gerçek hayat senaryosunu simüle ederek flask uygulamasını tetiklemiş olacağız.

POST isteği:

POST gövdesi

Python konsolu yanıtı:

konsol yanıtı

Postacının yanıtı:

Postacı yanıtı

Kod Derin Dalışı

 @app.route('/', methods=['GET', 'POST']) def index(): # Bellow code should be uncommented when running in AWS:Lambda # above should be commented as well as flask import + app definition # def lambda_handler(event, context): """ Lambda handler: When a request hits the API gateway linked to this lambda_function this is the function that gets called. The request data is passed as the event variable which is a dictionary object, in this case it the json of the POST request from which we extract the body details """ # Parses the details from the POST request: extracts model and input data # Based on model it imports the trained model from local # Outputs the predicted user based on input data try: prediction = functions.predict_user(request.get_json()) # Below code should be uncommented when running from AWS, above should be commented. # prediction = functions.predict_user(event) return jsonify({'statuscode': 200, 'status': 'success', 'predicted user': str(prediction) }) except Exception as e: return jsonify({'statuscode': 400, 'status': 'error', 'message': str(e)})


Yukarıdaki kod flask-app olarak ayarlanmıştır ancak belirli satırlara yorum yaparak ve açıklamaları kaldırarak kolayca Lambda'ya geçebilirsiniz.


Yapısı çok basittir; biz sadece tahmin_user() adında başka bir işlevi çağırıyoruz ve POST isteğinden json gövdesini girdi olarak sağlıyoruz.

tahmin_kullanıcı()

 def predict_user(event): """ Gets the input details from the body of the POST request and returns the predicted user """ # Print the event for debugging purposes print(event) # Check if the message has the correct body structure if ['Model', 'HT', 'PPT', 'RRT', 'RPT'] == list(event.keys()): print(f"Model is:", event['Model']) if event["Model"] == "SVM": # Load the trained SVM model from the joblib file model_path = os.path.join(basedir, 'models', 'svm_model.joblib') model = joblib.load(model_path) elif event["Model"] == "RF": # Load the trained Random Forest model from the joblib file model_path = os.path.join(basedir, 'models', 'rf_model.joblib') model = joblib.load(model_path) elif event["Model"] == "XGBoost": # Load the trained XGBoost model from the joblib file model_path = os.path.join(basedir, 'models', 'xgb_model.joblib') model = joblib.load('model_path') # Extract the features from the event dictionary features = [ event['HT']['Mean'], event['HT']['STD'], event['PPT']['Mean'], event['PPT']['STD'], event['RRT']['Mean'], event['RRT']['STD'], event['RPT']['Mean'], event['RPT']['STD'] ] # Make a prediction using the loaded model and the extracted features prediction = model.predict([features]) # Return the predicted user return prediction[0]


Bu işlev, önceden eğitilmiş belirli ML modelini yüklemeye karar verdiğimiz model parametresine bağlı olarak basit bir şekilde yazılmıştır.


Önceden eğitilmiş model ile kullanıcı tahminini yapıyoruz ve bunu talep sahibine geri gönderiyoruz. ( son Postacı yanıt fotoğrafına bakın )


Modellerin eğitimi bu makalenin I. bölümünde yapılmıştır, yukarıdaki bağlantıya bakın .


Makaleyi beğendiyseniz ve bana destek olmak istiyorsanız şunları yaptığınızdan emin olun:

🔔 Beni takip et Bogdan Tudorache

🔔 Benimle iletişime geçin: LinkedIn | Reddit