BSA08_Pyspark-Logistic.ipynb
패키지 호출 및 스파크 세션 시작
from pyspark.sql import SparkSession
from pyspark.sql.types import StringType
from pyspark.ml.feature import StringIndexer, OneHotEncoder
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import LogisticRegression
from pyspark.ml.evaluation import BinaryClassificationEvaluator
spark = SparkSession.builder.appName("churn").getOrCreate()
spark.conf.set("spark.sql.execution.arrow.pyspark.enabled","true")
데이터 불러오기
churn_df = spark.read.csv("Telco-Customer-Churn.csv",inferSchema=True,header=True)
churn_df.show()
churn_df.printSchema()
# 변수 제거
churn_df = churn_df.drop("customerID")
# 문자형
문자변수 = [변수.name for 변수 in churn_df.schema.fields if isinstance(변수.dataType, StringType)]
# 타입 확인
indexer = StringIndexer(inputCols=문자변수, # input값이 하나인 경우에는 inputCol="gender"처럼 표기
outputCols=["{}_SI".format(c) for c in 문자변수])
encode_df = indexer.fit(churn_df).transform(churn_df)
encode_df.printSchema()
# 기존에 integer였던 변수 3개("SeniorCitizen","tenure", "MonthlyCharges")와
# double로 변환한 문자변수들을 합쳐 설명변수 리스트로 만듦
설명변수 = ["SeniorCitizen","tenure", "MonthlyCharges"]+["{}_SI".format(c) for c in 문자변수]
설명변수, 반응변수 분리
설명변수 = 설명변수[0:-1]
변수묶음 = VectorAssembler(inputCols=설명변수,outputCol="features")
변환자료 = 변수묶음.transform(encode_df)
변환자료.select("features","Churn_SI").show()
분류자료 = 변환자료.select(["features","Churn_SI"])
분류자료.show()
모델 적용 및 성능평가
train_data, test_data =분류자료.randomSplit([0.7, 0.3], 316)
분석모형 = LogisticRegression(labelCol="Churn_SI").fit(train_data)
분석모형.summary
분석모형.summary.predictions.show(truncate=False)
분석모형.summary.predictions.describe().show()
예측 = 분석모형.evaluate(test_data)
예측.predictions.show()
평가 = BinaryClassificationEvaluator(rawPredictionCol="prediction",labelCol="Churn_SI") # (예측값, 실제값) 형태로
auc = 평가.evaluate(예측.predictions)
auc # 범주가 2개인 경우
# auc 1에 가까우면 설명력 good, 0에 가까우면 설명력 bad
# auc = 0.5 : 무작위로
'Statistics > BSA' 카테고리의 다른 글
230524 / BSA12. 트리 앙상블 (Tree Ensemble) (0) | 2023.05.29 |
---|---|
230524 / BSA12. 분류 나무 (Classification Tree) (0) | 2023.05.29 |
230517 / BSA11. pyspark에서 통계 모델링 (0) | 2023.05.20 |
230517 / BSA11. python에서 통계 모델링 (0) | 2023.05.20 |
230515 / BSA11. CountVectorizer, TfidfVectorizer (0) | 2023.05.20 |