Python
Genel Bakış
Python zenginleştirme operatörü, mindzieStudio'da en güçlü ve esnek zenginleştirme operatörlerinden biridir ve özel Python kodları yazmanıza olanak tanıyarak süreç madenciliği verilerinizi dönüştürmenize, analiz etmenize ve zenginleştirmenize imkan sağlar. Bu operatör, Pandas DataFrame'leri üzerinden olay günlüklerinize doğrudan erişim sunar; böylece NumPy, Pandas gibi kütüphaneler ile özel iş mantığınızı kullanarak standart zenginleştirmelerin ötesine geçen sofistike veri dönüşümleri oluşturabilirsiniz.
%95 kullanım oranı ile Python, mindzieStudio'da en çok tercih edilen zenginleştirme yöntemlerinden biridir. Standart süreç madenciliği işlemleri ile gelişmiş veri bilimi iş akışları arasında köprü kurar ve veri bilimciler ile analistlerin süreç madenciliği hattı içinde özel algoritmalar, karmaşık iş kuralları ve gelişmiş analizleri doğrudan uygulamasını sağlar. Operatör, Python kodu yürütülmesini mindzieStudio'nun veri modeli ile sorunsuz şekilde entegre eder ve veri serileştirme, tip dönüşümü ile sonuçların veri setinize geri entegrasyonunu otomatik olarak yönetir.
Yaygın Kullanımlar
- Standart hesaplayıcılarda olmayan özel iş mantığı gerektiren karmaşık KPI'lar hesaplamak
- Süreç verileri üzerinde makine öğrenimi modellerini tahmin, sınıflandırma veya kümeleme için uygulamak
- Olay nitelikleri üzerinde gelişmiş metin işleme ve doğal dil işleme yapmak
- Karmaşık iş kurallarına dayalı özel uygunluk kontrolleri gerçekleştirmek
- İstatistiksel analiz ve gelişmiş matematiksel işlemler ile türetilmiş nitelikler oluşturmak
- Python kodu içinde API çağrıları yaparak ya da harici dosyalar okuyarak dış veri kaynaklarını entegre etmek
- İş alanınıza özgü özel veri kalite kontrolleri ve doğrulama kuralları oluşturmak
Ayarlar
Filtre: Python betiği tarafından işlenecek vakaları sınırlamak için isteğe bağlı filtredir. Bu, dönüşümlerin yalnızca veri alt kümelerine uygulanmasına olanak tanır, böylece performansı artırır ve hedefli analizler yapılabilir. Filtre uygulanmazsa Python kodu veri setindeki tüm vakaları işler.
Sütunlar: Veri setinizde mevcut hangi sütunların Python betiğine erişilebilir olacağını seçin. Bu sütunlar case_table ve event_table DataFrame'lerinde kullanılabilir. Bellek kullanımını en aza indirmek ve performansı artırmak için yalnızca seçilen sütunlar Python'a aktarılır. CaseId sütunu her zaman otomatik olarak dahil edilir.
Değiştirilen Sütunlar: Python betiğinizin değiştirebileceği seçili sütunları belirtin. Bu ayar, veri bütünlüğünü koruyarak mevcut nitelik değerlerini güncellemenizi sağlar. Sadece Sütunlar ayarında seçilen sütunlar değiştirilebilir olarak işaretlenebilir.
Yeni Sütunlar: Python betiğinizin oluşturacağı yeni nitelikleri tanımlayın. Her yeni sütun için şu bilgileri belirtmelisiniz:
- Sütun Adı: Python kodunda kullanılacak iç isim
- Görünen Ad: mindzieStudio'da gösterilecek kullanıcı dostu isim
- Veri Tipi: Veri tipi (String, Integer, DateTime, Boolean, Double)
- Kaynak Tipi: Nitelik Case ya da Event seviyesinde mi eklenecek
- Format: İsteğe bağlı görüntüleme formatı
Python Kodu: Veriniz üzerinde çalıştırılacak Python betiği. Kodunuz erişebilir:
case_table: Vaka seviyesinde nitelikleri içeren Pandas DataFrameevent_table: İçselEventIndex, CaseId, ActivityName, ActivityTime ve seçili olay niteliklerini içeren Pandas DataFrame
Betik, bu DataFrame'leri yerinde değiştirmelidir. Değiştirilen sütunlarda (Değiştirilen Sütunlar ayarında işaretlenen) ya da yeni sütunlar eklenmesi (Yeni Sütunlar ayarında tanımlanan) gibi tüm değişiklikler otomatik olarak veri setinize entegre edilir.
Python Görüntüsü: Python yürütme ortamını belirtir. Seçenekler şunlardır:
- LOCAL: Yerel Python kurulumunu kullanır (mevcutsa)
- Docker görüntüsü adı: Gerekli Python paketlerine sahip spesifik Docker görüntüsü
- Varsayılan: mindzie'nin ortak veri bilimi kütüphaneleri içeren standart Python ortamı
Örnekler
Örnek 1: Sipariş İşleme Verimlilik Skoru Hesaplama
Senaryo: Siparişten tahsilata sürecinde, sipariş değeri, işleme süresi ve tekrar çalışma faaliyetleri sayısına dayalı özel bir verimlilik skoru hesaplamanız gerekiyor.
Ayarlar:
- Filtre: Yok (tüm vakalar işlenecek)
- Sütunlar: OrderValue, CustomerPriority
- Değiştirilen Sütunlar: Yok
- Yeni Sütunlar:
- Sütun Adı: EfficiencyScore
- Görünen Ad: Efficiency Score
- Veri Tipi: Double
- Kaynak Tipi: Case
- Python Kodu:
# Her sipariş için verimlilik skorunu hesapla
import numpy as np
# Vaka başına tekrar çalışma faaliyetlerini say
rework_activities = ['Order Correction', 'Price Adjustment', 'Approval Retry']
event_table['IsRework'] = event_table['ActivityName'].isin(rework_activities)
rework_counts = event_table.groupby('CaseId')['IsRework'].sum().reset_index()
rework_counts.columns = ['CaseId', 'ReworkCount']
# Vaka süresini gün olarak hesapla
case_durations = event_table.groupby('CaseId')['ActivityTime'].agg(['min', 'max'])
case_durations['Duration'] = (case_durations['max'] - case_durations['min']).dt.total_seconds() / 86400
case_durations = case_durations.reset_index()[['CaseId', 'Duration']]
# Case tablosuyla birleştir
case_table = case_table.merge(rework_counts, on='CaseId', how='left')
case_table = case_table.merge(case_durations, on='CaseId', how='left')
# Verimlilik skorunu hesapla (0-100)
case_table['EfficiencyScore'] = 100 * (
(case_table['OrderValue'] / case_table['OrderValue'].max()) * 0.4 +
(1 - case_table['ReworkCount'] / 10) * 0.3 +
(1 - case_table['Duration'] / 30) * 0.3
)
case_table['EfficiencyScore'] = np.clip(case_table['EfficiencyScore'], 0, 100)
# Geçici sütunları temizle
case_table = case_table.drop(['ReworkCount', 'Duration'], axis=1)
- Python Görüntüsü: LOCAL
Çıktı: Sipariş değeri, minimum tekrar çalışma ve hızlı işlem süresi kombinasyonuna dayalı olarak 0 ile 100 arasında değişen "Efficiency Score" isimli yeni bir vaka niteliği oluşturur. Yüksek skorlar daha verimli sipariş işlemesini gösterir.
Bilgiler: Bu özel skor, en verimli işlenen siparişlerin belirlenmesine yardımcı olur, performans kıyaslaması, en iyi uygulamaların tespiti ve süreç iyileştirme önceliklerinin belirlenmesinde kullanılır.
Örnek 2: Anormal Olay Sıralamalarını Tespit Etme
Senaryo: Sağlık hizmetlerinde hasta tedavi sürecinde, tıbbi prosedürlerin standart protokollerden sapma gösterdiği vakaları belirleyin.
Ayarlar:
- Filtre: Yok
- Sütunlar: PatientAge, Department
- Değiştirilen Sütunlar: Yok
- Yeni Sütunlar:
- Sütun Adı: HasAnomalousSequence
- Görünen Ad: Anomalous Sequence Detected
- Veri Tipi: Boolean
- Kaynak Tipi: Case
- Sütun Adı: AnomalyDescription
- Görünen Ad: Anomaly Description
- Veri Tipi: String
- Kaynak Tipi: Case
- Python Kodu:
# Beklenen sıra desenlerini tanımla
normal_sequences = [
['Registration', 'Triage', 'Examination', 'Treatment', 'Discharge'],
['Registration', 'Triage', 'Examination', 'Lab Test', 'Treatment', 'Discharge'],
['Registration', 'Emergency Assessment', 'Treatment', 'Observation', 'Discharge']
]
def check_sequence_anomaly(group):
activities = group.sort_values('ActivityTime')['ActivityName'].tolist()
# Tekrarlanan faaliyetleri kontrol et
if len(activities) != len(set(activities)):
return True, "Repeated activities detected"
# Sıra dışı faaliyetleri kontrol et
if 'Discharge' in activities and activities.index('Discharge') < len(activities) - 1:
return True, "Activities after discharge"
if 'Registration' in activities and activities.index('Registration') > 0:
return True, "Registration not first activity"
# Sıralamanın herhangi normal kalıba uyup uymadığını kontrol et
matches_normal = any(
all(act in activities for act in normal_seq)
for normal_seq in normal_sequences
)
if not matches_normal and len(activities) > 3:
return True, "Non-standard sequence pattern"
return False, ""
# Her vaka için anomali tespiti uygula
anomaly_results = event_table.groupby('CaseId').apply(check_sequence_anomaly)
# Sonuçları vaka tablosuna ekle
case_table['HasAnomalousSequence'] = case_table['CaseId'].map(
lambda x: anomaly_results[x][0] if x in anomaly_results.index else False
)
case_table['AnomalyDescription'] = case_table['CaseId'].map(
lambda x: anomaly_results[x][1] if x in anomaly_results.index else ""
)
- Python Görüntüsü: LOCAL
Çıktı: İki yeni vaka niteliği oluşturur:
- "Anomalous Sequence Detected": Vakada sıra dışı bir durum olup olmadığını gösteren Boolean bayrak
- "Anomaly Description": Tespit edilen anomali türünü açıklayan metin
Bilgiler: Bu zenginleştirme, standart tıbbi protokollerden sapma gösteren vakaların tespit edilmesini sağlar; kalite güvence ekiplerinin potansiyel sorunları araştırması ve hasta güvenliğini sağlaması için önemlidir.
Örnek 3: Tedarikçi Performans Metriklerini Hesaplama
Senaryo: Satın alma sürecinde, teslimat süreleri, kalite sorunları ve sipariş tamlığı temelinde kapsamlı tedarikçi performans metrikleri hesaplayın.
Ayarlar:
- Filtre: ActivityName = "Goods Receipt"
- Sütunlar: SupplierID, OrderQuantity, ReceivedQuantity
- Değiştirilen Sütunlar: Yok
- Yeni Sütunlar:
- Sütun Adı: OnTimeDeliveryRate
- Görünen Ad: On-Time Delivery Rate %
- Veri Tipi: Double
- Kaynak Tipi: Case
- Sütun Adı: QualityScore
- Görünen Ad: Supplier Quality Score
- Veri Tipi: Double
- Kaynak Tipi: Case
- Python Kodu:
# Teslimat performansını hesapla
def calculate_supplier_metrics(group):
po_created = group[group['ActivityName'] == 'PO Created']['ActivityTime'].min()
goods_received = group[group['ActivityName'] == 'Goods Receipt']['ActivityTime'].max()
# Beklenen teslim süresi 5 iş günü
expected_days = 5
actual_days = np.busday_count(po_created.date(), goods_received.date())
on_time = 1 if actual_days <= expected_days else 0
# Kalite sorunlarını kontrol et
has_quality_issue = 'Quality Issue' in group['ActivityName'].values
has_return = 'Return to Supplier' in group['ActivityName'].values
quality_score = 100
if has_quality_issue:
quality_score -= 30
if has_return:
quality_score -= 40
return pd.Series({
'OnTimeDelivery': on_time,
'QualityScore': quality_score
})
# Her vaka için metrikleri hesapla
supplier_metrics = event_table.groupby('CaseId').apply(calculate_supplier_metrics)
# Tedarikçi bazında toplulaştır
supplier_performance = case_table.merge(supplier_metrics, left_on='CaseId', right_index=True)
supplier_summary = supplier_performance.groupby('SupplierID').agg({
'OnTimeDelivery': 'mean',
'QualityScore': 'mean'
}).reset_index()
supplier_summary.columns = ['SupplierID', 'OnTimeDeliveryRate', 'AvgQualityScore']
# Case tablosuna geri ekle
case_table = case_table.merge(
supplier_summary[['SupplierID', 'OnTimeDeliveryRate', 'AvgQualityScore']],
on='SupplierID',
how='left'
)
case_table['OnTimeDeliveryRate'] = case_table['OnTimeDeliveryRate'] * 100
case_table.rename(columns={'AvgQualityScore': 'QualityScore'}, inplace=True)
- Python Görüntüsü: LOCAL
Çıktı: Vaka seviyesinde tedarikçi performans metrikleri oluşturur:
- "On-Time Delivery Rate %": Bu tedarikçi tarafından zamanında teslim edilen siparişlerin yüzdesi
- "Supplier Quality Score": Kalite sorunları ve iadeler dikkate alınarak 0-100 arasında kalite skoru
Bilgiler: Bu metrikler, satın alma ekiplerinin tedarikçilerin performansını objektif olarak değerlendirmesini, tedarikçi seçim kararlarını desteklemesini ve performans iyileştirme müdahaleleri gereken tedarikçileri belirlemesini sağlar.
Örnek 4: Süreç Yorumlarında Metin Madenciliği
Senaryo: IT hizmet yönetimi sürecinde, bilet yorumlarını analiz ederek sorunları kategorize edin ve duygu durumunu tespit edin.
Ayarlar:
- Filtre: Yok
- Sütunlar: TicketDescription, ResolutionNotes
- Değiştirilen Sütunlar: Yok
- Yeni Sütunlar:
- Sütun Adı: IssueCategory
- Görünen Ad: Issue Category
- Veri Tipi: String
- Kaynak Tipi: Case
- Sütun Adı: CustomerSentiment
- Görünen Ad: Customer Sentiment
- Veri Tipi: String
- Kaynak Tipi: Case
- Python Kodu:
import re
# Kategorize için anahtar kelimeler
category_keywords = {
'Hardware': ['laptop', 'desktop', 'printer', 'mouse', 'keyboard', 'monitor', 'hardware'],
'Software': ['application', 'software', 'program', 'install', 'update', 'crash', 'error'],
'Network': ['network', 'internet', 'wifi', 'connection', 'vpn', 'firewall'],
'Access': ['password', 'login', 'access', 'permission', 'authentication', 'account'],
'Other': []
}
# Duygu göstergeleri
negative_words = ['slow', 'broken', 'failed', 'cannot', 'unable', 'frustrated', 'urgent', 'critical']
positive_words = ['resolved', 'working', 'fixed', 'thank', 'great', 'excellent', 'happy']
def categorize_issue(text):
if pd.isna(text):
return 'Other'
text_lower = text.lower()
for category, keywords in category_keywords.items():
if any(keyword in text_lower for keyword in keywords):
return category
return 'Other'
def analyze_sentiment(text):
if pd.isna(text):
return 'Neutral'
text_lower = text.lower()
negative_count = sum(1 for word in negative_words if word in text_lower)
positive_count = sum(1 for word in positive_words if word in text_lower)
if negative_count > positive_count:
return 'Negative'
elif positive_count > negative_count:
return 'Positive'
else:
return 'Neutral'
# Metin analizini uygula
case_table['IssueCategory'] = case_table['TicketDescription'].apply(categorize_issue)
case_table['CustomerSentiment'] = case_table['TicketDescription'].apply(analyze_sentiment)
- Python Görüntüsü: LOCAL
Çıktı: İki metne dayalı yeni nitelik oluşturur:
- "Issue Category": IT sorununun kategorisi (Donanım, Yazılım, Ağ, Erişim, Diğer)
- "Customer Sentiment": Duygu analizi sonucu (Pozitif, Negatif, Nötr)
Bilgiler: Bu zenginleştirme, IT hizmet yöneticilerinin sorun dağılımını anlamasına, müşteri duyarlılığına göre önceliklendirme yapmasına ve ek destek kaynakları veya eğitim gerektiren alanları belirlemesine yardımcı olur.
Örnek 5: Finansal Uyum Risk Skoru Hesaplama
Senaryo: Finansal işlem onay sürecinde, çoklu risk faktörlerine dayalı uyum risk skorunu hesaplayın.
Ayarlar:
- Filtre: TransactionType = "Wire Transfer"
- Sütunlar: TransactionAmount, CustomerCountry, AccountAge, PreviousFlags
- Değiştirilen Sütunlar: Yok
- Yeni Sütunlar:
- Sütun Adı: ComplianceRiskScore
- Görünen Ad: Compliance Risk Score
- Veri Tipi: Integer
- Kaynak Tipi: Case
- Sütun Adı: RiskLevel
- Görünen Ad: Risk Level
- Veri Tipi: String
- Kaynak Tipi: Case
- Python Kodu:
# Risk faktörleri ve ağırlıkları tanımla
high_risk_countries = ['Country1', 'Country2', 'Country3'] # Gerçek liste için yer tutucu
suspicious_amount_threshold = 10000
rapid_transaction_threshold = 5 # işlem/gün
def calculate_risk_score(row):
risk_score = 0
# Tutar riski (0-30 puan)
if row['TransactionAmount'] > suspicious_amount_threshold:
risk_score += min(30, int(row['TransactionAmount'] / suspicious_amount_threshold * 10))
# Coğrafi risk (0-25 puan)
if row['CustomerCountry'] in high_risk_countries:
risk_score += 25
# Hesap yaşı riski (0-20 puan)
if pd.notna(row['AccountAge']) and row['AccountAge'] < 30:
risk_score += 20 - int(row['AccountAge'] / 30 * 20)
# Önceki bayraklar riski (0-25 puan)
if pd.notna(row['PreviousFlags']) and row['PreviousFlags'] > 0:
risk_score += min(25, row['PreviousFlags'] * 5)
return risk_score
# İşlem hızını hesapla
transaction_counts = event_table[event_table['ActivityName'] == 'Transaction Initiated'].groupby('CaseId').size()
case_table['TransactionVelocity'] = case_table['CaseId'].map(transaction_counts).fillna(0)
# Risk skorlarını hesapla
case_table['ComplianceRiskScore'] = case_table.apply(calculate_risk_score, axis=1)
# Risk seviyesini ata
def assign_risk_level(score):
if score >= 70:
return 'High'
elif score >= 40:
return 'Medium'
else:
return 'Low'
case_table['RiskLevel'] = case_table['ComplianceRiskScore'].apply(assign_risk_level)
# Geçici sütunları temizle
case_table = case_table.drop(['TransactionVelocity'], axis=1)
- Python Görüntüsü: LOCAL
Çıktı: Kapsamlı risk değerlendirme nitelikleri yaratır:
- "Compliance Risk Score": 0-100 arası sayısal risk puanı
- "Risk Level": Riskin kategorik sınıflandırması (Yüksek, Orta, Düşük)
Bilgiler: Bu risk skoru, uyum ekiplerinin işlem incelemelerini önceliklendirmesini, risk seviyelerine göre onay iş akışlarını otomatikleştirmesini ve yanlış pozitifleri en aza indirerek düzenleyici uyumu sağlamasını mümkün kılar.
Çıktı
Python zenginleştirme operatörü, özel kodunuza dayalı olarak yeni veya değiştirilmiş nitelikler üretir:
Yeni Vaka Nitelikleri: Tanımlı Yeni Sütunlar ile eşleşen ve case_table DataFrame'ine eklenen sütunlar, veri setinizde vaka seviyesinde nitelikler olarak oluşturulur. Bu nitelikler filtrelerde, hesaplayıcılarda ve diğer zenginleştirmelerde anında kullanılabilir.
Yeni Olay Nitelikleri: Tanımlı Yeni Sütunlarla eşleşen ve event_table DataFrame'ine eklenen sütunlar, olay seviyesinde nitelikler olarak oluşturulur. Bu, olay bazlı hesaplamalar veya sınıflandırmalar yapılmasına imkan verir.
Değiştirilen Nitelikler: Değiştirilen Sütunlar ayarında belirtilen mevcut sütunların değerleri güncellenebilir. Orijinal veri tipi korunmalı, fakat iş mantığınıza göre değerler dönüştürülebilir.
Veri Tipi İşleme: Operatör, Python ve mindzieStudio veri tipleri arasındaki dönüşümleri otomatik olarak yönetir:
- Python string → mindzieStudio String
- Python int32/int64 → mindzieStudio Integer
- Python float → mindzieStudio Double
- Python datetime → mindzieStudio DateTime
- Python bool → mindzieStudio Boolean
Vaka ve Olayların Kaldırılması: İleri düzey kullanımda, ilgili DataFrame'lerden filtreleme ile vakalar veya olaylar çıkarılabilir. Çıktıdaki case_table'da olmayan vakalar veri setinden kaldırılır.
Zenginleştirilen nitelikler, mindzieStudio'nun tüm diğer özellikleriyle sorunsuz şekilde entegre olur ve süreç madenciliği analiz akışınızda özel Python dönüşümlerinden tam olarak faydalanmanızı sağlar.
Ayrıca Bakınız
- AI Case Prediction - Tahmin için makine öğrenimi modelleri kullanın
- Attribute Calculator - Kod kullanmadan basit türetilmiş nitelikler oluşturun
- Filter Cases - İşlem öncesi veri filtreleme
- Representative Case Attribute - Olaylardan temsilci değerler çıkarma
Bu dokümantasyon mindzie Studio süreç madenciliği platformunun bir parçasıdır.