전체 글 96

airflow는 어떻게 작동할까? 그리고 DAG란?

기존에 다른 배치 프로그램을 사용하다가 airflow로 넘어오면서 뭐 같은 workflow 프로그램 이겠구나 싶었다. 근데 airflow만의 문법이나 기능? 개념? 등을 새롭게 접하면서 단순히 똑같은 배치 프로그램이라고 생각하고 넘어가기 보다는 찾아보고 정리하는 부분이 필요하다고 느꼈다. 그리고 airflow만의 시간에 대한 공부없이 냅다 dag를 만들어서 구현하려다 보니 너무 고생했어서 여기다 같이 정리 하겠다 ㅇㅅㅇ. 1.airflow란? Apache Airflow™는 python 코드로 워크플로우(workflow)를 개발하고, 스케줄링 및 모니터링하기 위한 오픈 소스 플랫폼. DAG(Directed Acyclic Graph, 유향 비순환 그래프): python으로 작성한 workflow로 이를 통해..

airflow DAG 결과를 Slack API로 메세지 받아보기

기존에 Jenkins를 이용해 코드 배치관리를 진행했는데 코드 관리나 배치 관리 복잡도가 증가하면서 모델별로 하나의 DAG로 관리하고 체계적인 system화를 위해 airflow로 배치를 옮기고 있다. 거기다 기존의 hive sql을 pyspark로 구현해서 정리까지 하고있는데 병아리 수준에서 시스템, 코드를 뜯어보고 새롭게 구성하려고 하니 에러 투성이다 ㅠ Slack에서 제공되는 API를 활용하여 구성해둔 DAG가 정상 작동 했는지 메세지를 전달 받아 모니터링을 효율적으로 하는 목적으로 해당 페이지를 작성했다. 참고로 Slack과 airflow는 설치 및 세팅이 돼 있다는 가정하에 작성했고 DAG 구성에 대한 디테일한 설명은 없다. 추후에 공부하고 정리해서 따로 올리려고 한다. [목차] 1.airflo..

[PySpark] Union(= unionAll) 함수로 두 데이터 프레임 합치기

PySpark union() 및 unionAll() 함수는 동일한 스키마 또는 구조의 둘 이상의 DataFrame을 병합하는 데 사용된다. 그러면 union 과 unionAll 함수의 차이는 뭘 까? 결론적으로 말하자면 두 함수의 차이는 없다. Spark 2.0.0 버전부터는 unionAll()은 사용되지 않고 union으로 사용된다. 참고사항으로 SQL 언어에서 Union은 중복을 제거하지만 UnionAll은 중복 레코드를 포함한 두 개의 데이터 세트를 병합한다. PySpark에서는 둘 다 동일하게 동작하며 DataFrame 중복을 제거하기 위해선 duplicate() 함수를 사용하는 것이 좋다. import pyspark from pyspark.sql import SparkSession spark =..

엘라스틱 넷 패널티를 활용한 서포트 벡터 머신의 변수선택법

내가 쓴 논문 정리 석사 졸업논문으로 서포트 벡터 머신의 변수선택 방법론에 대해 제시하고 해당 문제를 최적화 문제로 풀어가는 논문이다. 기존의 방법론에 엘라스틱 넷 패널티를 적용해 최적화 알고리즘으로 풀어가는 방식인데 오랜만에 보니까 기억도 안난다.... 어렵다.. 서론 기존의 binary svm은 고차원(high dimensional) data, noise가 많은 경우 성능이 떨어지는 문제와 주요 변수의 판별이 어려운 단점이 있음. 이러한 문제를 해결하기 위해 panelty 항을 이용하여 성능을 개선된 svm이 나오게 됨. ex) L1 svm, doubly svm linear 문제에서는 이러한 panelty를 직접 적용하는 방법이 옳지만 nonlinear 문제에서는 원변수 선택이 아니라 커널의 기저 함..

[PySpark] explode, explode_outer 함수 차이

다음과 같은 스키마를 가진 테이블을 생성했다. an_array 라는 array 컬럼 하나와 a_map 으로 묶어진 key - value 컬럼이 존재한다 df = spark.createDataFrame( [(1, ["foo", "bar"], {"x": 1.0}), (2, [], {}), (3, None, None)], ("id", "an_array", "a_map") ) df.show() +---+----------+----------+ | id| an_array| a_map| +---+----------+----------+ | 1|[foo, bar]|{x -> 1.0}| | 2| []| {}| | 3| null| null| +---+----------+----------+ df.printSchema()..

[PySpark] 신용카드 사기거래 탐지 모델링(3) - 기본모델링

item 우선, 회사에서 데이터 모델링 작업을 하다가 라벨이 심각하게 불균등하고, 게다가 데이터 정보량도 거의 없어 모델링이 필요한가? rule 기반으로 분류 작업을 하면 안될까??? 라는 고민을 하다가 현재 데이터에서 주성분 몇개 빼고 정보량이 없는 상태에서 모델간의 성능 비교를 해보자는 취지로 진행하였다. 그냥 주성분 전부 다써서 기본 로지스틱 모델만 돌려도 성능이 꽤나오는 깔끔한 데이터니 해보실분들은 따로 해보길 권한다. 1. ML용 Input 데이터 구성 우선, Pyspark ML을 이용하기 위해서는 vectorassembler을 이용해 머신러닝 알고리즘용 featurevector를 구성한다. feature가 dense vector 또는 sparse vector로 구성되는데 리소스에 따라 효율이 ..

[머신러닝] ROC 커브, PR 커브 모델 성능 평가시 무엇을 언제 쓸까?

https://sikmulation.tistory.com/51 [PySpark] 5폴드 교차검증(5-fold crossvalidation) 과 모델선택 1.교차검증과 모델선택 ML 알고리즘 마다 조절해야할 하이퍼 파라미터 옵션이 존재하는데 이를 조정하면서 학습데이터에서 과소적합, 과대적합을 방지 할 수 있다. 그 중 교차검증 방법론은 연 sikmulation.tistory.com 우선, 여기서 교차 검증시 평가함수로 PySpark 함수 BinaryClassificationEvaluator 를 사용했다. 해당 함수는 2개의 metric을 지원하는데 "areaUnderPR", "areaUnderROC" 이다. 그럼 이 두개는 언제 어떨때 쓰는게 좋을까? 1.PR curve(precision - recall)..

[PySpark] 5폴드 교차검증(5-fold crossvalidation) 과 모델선택

1.교차검증과 모델선택 ML 알고리즘 마다 조절해야할 하이퍼 파라미터 옵션이 존재하는데 이를 조정하면서 학습데이터에서 과소적합, 과대적합을 방지 할 수 있다. 그 중 교차검증 방법론은 연속적으로 훈련과 검증 단계를 교차해가며 모델 성능을 검증하는데 여기서 주어진 데이터에서 최적의 하이퍼 파라미터를 보유한 가장 성능이 높은 모델을 선택한다. 장점 모든 데이터 셋을 평가, 훈련에 활용 → 과소적합, 과대적합 방지 모델 선택 단점 시간이 오래걸림 위의 사진에서 예시는 5폴드 교차검증으로 학습 데이터와 검증 데이터를 활용하여 검증시 가장 성능이 좋은 모델, 하이퍼 파라미터를 선택한 후 테스트 데이터를 활용하여 마지막 평가 진행. - 로지스틱 파라미터 참고:https://runawayhorse001.github...

오버피팅(overfitting)과 언더피팅(underfitting)이 뭐길래?

1.과소적합(underfitting)과 과대적합(overfitting) 모델이 데이터를 학습하는 과정에서 발생하는 과소적합, 과대적합 문제를 1) 모델 복합도 측면, 2) 데이터 정보량 측면에서 고려할 필요가 있음. 과소적합(underfitting): 학습 데이터조차 제대로 학습x(데이터 내재적인 구조 반영x), 편향이 높게(high bias) 학습되어 새로운 데이터를 예측하지 못하는 상태 과대적합(overfitting): 학습 데이터를 과하게 학습(지엽적인 특성까지 반영), 분산이 높게(high variance) 학습되어 새로운 데이터를 예측하지 못하는 상태 결론적으로, 편향을 높이면 학습이 잘 안되고, 편향이 낮으면 분산이 높아지는 절충(trade off) 관계로 두 가지 에러(error)를 최소화 ..