Сопоставление оценки склонности с PythonPython

Программы на Python
Ответить
Anonymous
 Сопоставление оценки склонности с Python

Сообщение Anonymous »

Сейчас я пытаюсь автоматизировать процесс оценки для моей компании. В прошлом весь процесс занимал не менее двух недель, и мне удавалось автоматизировать все, что требовалось как минимум 1 день для всего процесса без контроля качества.
Бывший коллега оставил свои сценарии R, и мне удалось написать сценарий Python на основе сценария R PSM, но результат был другим, почти идентичным. Я использовал одни и те же данные для сценария R PSM и моего сценария PSM на Python. База данных хранится в таблице db2:
Сценарий Python:

Код: Выделить всё

import pandas as pd
from connection import MetaData, cursor1, connection1
from sklearn.neighbors import NearestNeighbors # KNN
from sklearn.linear_model import LogisticRegression
import os

### DB Connection in connection.py

metadata = MetaData()

# Connextion to Database
engine = define_connection2()

# SQL-Query
sql = 'SELECT * FROM Table1'

# Process the Query
with engine.connect() as connection:

dataSample_all = pd.read_sql_query(sql, connection)

dataSample = dataSample_all.copy()

# Convert factors to numeric values
for col in dataSample.columns:
if dataSample[col].dtype == 'object':
dataSample[col] = pd.to_numeric(dataSample[col].str.replace(',', '.'), errors='coerce')

# Calculate total cost SA700
dataSample['G'] = dataSample[['BETRAG_ARZT_VJ', 'BETRAG_ZAHNARZT_VJ', 'BETRAG_APOTHEKE_VJ',
'BETRAG_KRKHS_VJ', 'BETRAG_SONST_VJ', 'BETRAG_DIALYSE_VJ',
'BETRAG_DMP_VJ', 'BETRAG_KRGELD_VJ', 'BETRAG_KRGELD_KIND_VJ']].sum(axis=1)

# Define variables
Tr = dataSample['TN']
Y = dataSample['G']
X = dataSample[[
'KV_1','KV_2','KV_3','KV_4','KV_5','KV_6','KV_7','KV_8','KV_9','KV_10','KV_11','KV_12','KV_13','KV_14','KV_15','KV_16',....



....,'KNR360_Nr234','PFLEGE_NR1','PFLEGE_NR2','PFLEGE_NR3','PFLEGE_NR4','PFLEGE_NR5'
]] # 285 Attributes

# Logistic regression to calculate propensity scores
logit_model = LogisticRegression(max_iter=1500, solver='saga', random_state=32)
logit_model.fit(X, Tr)
propensity_scores = logit_model.predict_proba(X)[:, 1]

# Indices for treated and control group
treated_indices = np.where(Tr == 1)[0]
control_indices = np.where(Tr == 0)[0]

# Nearest Neighbors for the control group (KNN)
nn = NearestNeighbors(n_neighbors=1)
nn.fit(propensity_scores[control_indices].reshape(-1, 1))

# Finding the nearest neighbors for the treatment group
distances, indices = nn.kneighbors(propensity_scores[treated_indices].reshape(-1, 1))

# Define caliper value
caliper = 0.02

# Filter pairs within the caliper
valid_matches = distances.flatten() 

Подробнее здесь: [url]https://stackoverflow.com/questions/78994687/propensity-score-matching-with-python[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»