12.2. 테이블과 인덱스
이전 섹션의 예제는 간단한 상수 문자열을 사용한 전체 텍스트 일치를 보여줍니다. 이 섹션에서는 선택적으로 인덱스를 사용하여 테이블 데이터를 검색하는 방법을 보여줍니다.
12.2.1. 테이블 검색
색인없이 전체 텍스트 검색을 수행 할 수 있습니다. 간단한 쿼리는 인쇄 title 단어가 포함 된 각 행의 friend 의에서 body 필드입니다 :
또한 friends 및 friendly 단어와 같은 관련 단어를 찾을 수 있습니다.이 단어 는 모두 같은 정규화 된 exeme로 축소되기 때문입니다.
위의 쿼리는 english 구성이 문자열을 구문 분석하고 정규화하는 데 사용되도록 지정합니다 . 또는 구성 매개 변수를 생략 할 수 있습니다.
보다 복잡한 예는 title 또는 body 에 create 및 table 이 포함 된 가장 최근 10 개의 문서를 선택하는 것입니다 .
명확성 을 위해 두 필드 중 하나에 NULL 을 포함하는 행을 찾는 데 필요한 coalesce 함수 호출을 생략했습니다 .
이러한 쿼리는 색인없이 작동하지만 대부분의 응용 프로그램은 가끔씩 임시 검색을 제외하고는이 방법이 너무 느리다는 것을 알게됩니다. 텍스트 검색을 실제로 사용하려면 일반적으로 색인을 만들어야합니다.
12.2.2. 인덱스 생성
텍스트 검색 속도를 높이기 위해 GIN 색인 ( 섹션 12.9 )을 만들 수 있습니다 .
to_tsvector 의 2-인수 버전이 사용됨을 주목하십시오 . 구성 이름을 지정하는 텍스트 검색 기능만 표현식 인덱스에서 사용할 수 있습니다( 섹션 11.7 ). 이는 인덱스 내용이 default_text_search_config 의 영향을 받지 않아야 하기 때문 입니다. tsvector 가 포함될 수 있고 어느 것이 무엇인지 추측할 방법이 없기 때문에 인덱스 내용이 일치하지 않을 수 있습니다 . 그러한 인덱스를 올바르게 덤프하고 복원하는 것은 불가능합니다.
위의 색인에서 두 인수 버전의 to_tsvector 가 사용 to_tsvector 구성 이름이 동일한 두 인수 버전의 to_tsvector 를 사용하는 쿼리 참조 만 해당 색인을 사용합니다. 즉, WHERE to_tsvector('english', body) @@ 'a & b' 는 색인을 사용할 수 있지만 WHERE to_tsvector(body) @@ 'a & b' 는 사용할 수 없습니다. 이렇게하면 인덱스 항목을 작성하는 데 사용 된 것과 동일한 구성으로 만 인덱스가 사용됩니다.
구성 이름이 다른 열에 의해 지정된보다 복잡한 표현식 색인을 설정할 수 있습니다. 예 :
여기서 config_name 은 pgweb 테이블 의 열입니다 . 따라서 각 인덱스 항목에 사용 된 구성을 기록하면서 동일한 인덱스에서 혼합 된 단순 거래 예제 단순 거래 예제 구성을 사용할 수 있습니다. 예를 들어 문서 모음에 다른 언어로 된 문서가 포함 된 경우에 유용합니다. 다시, 인덱스를 사용하기위한 쿼리는 일치해야합니다 WHERE to_tsvector(config_name, body) @@ 'a & b' 예 : WHERE to_tsvector (config_name, body) @@ 'a & b') .
인덱스는 열을 연결할 수도 있습니다.
또 다른 접근법은 별도의 단순 거래 예제 tsvector 열 을 만들어 to_tsvector 의 출력을 유지하는 to_tsvector 입니다. 소스 데이터를 사용하여이 열을 자동으로 최신 상태로 유지하려면 저장된 생성 열을 사용하십시오. 이 예제는 title 과 body 연결 한 것으로 , coalesce 을 사용하여 한 필드가 다른 필드가 NULL 일 때 색인을 생성하도록 합니다 .
그런 다음 검색 속도를 높이기 위해 GIN 색인을 만듭니다.
이제 빠른 전체 텍스트 검색을 수행 할 준비가되었습니다.
식 인덱스에 대한 개별 열 방식의 한 가지 장점은 인덱스를 사용하기 위해 쿼리에서 텍스트 검색 구성을 명시 적으로 지정할 필요가 없다는 것입니다. 위의 예와 같이 쿼리는 default_text_search_config 에 따라 달라질 수 있습니다 . 또 다른 장점은 인덱스 일치를 확인하기 위해 to_tsvector 호출을 다시 실행할 필요가 없기 때문에 검색 속도가 더 빠릅니다 . (GIN 인덱스보다 GiST 인덱스를 사용할 때 더 중요합니다 . 섹션 12.9 참조 ) expression-index 접근 방식은 설정이 더 간단하지만 tsvector 표현이 명시 적으로 저장되지 않기 때문에 디스크 공간이 더 적게 필요합니다 .
[기고] AI에 절대적인 데이터···거래 활성화 플랫폼 필요
·인공지능(AI), 빅데이터가 일상생활 속에 많이 스며들면서 이제 비전문가도 어느 정도 딥러닝, 머신러닝과 같은 용어들을 한 번 이상 들어봤을 것 같다. AI, 머신러닝, 딥러닝은 비슷하지만 그 포함관계가 다르다. AI가 가장 큰 개념이고 이 안에 머신러닝, 딥러닝이 순차적으로 포함된다. AI 모델 구축시 세부적으로 따지면 여러 단계로 나눌 수 있지만 크게 크게 두 단계로 구분할 수 있다.
1단계는 데이터 수집이고 2단계는 데이터 전처리와 분석 및 결과 도출이다. 대부분의 AI 교재와 학원, 학교는 2단계에 맞추어져 있다. 이에, 2단계를 잘하기 위해 각종 수학적 테크닉과 코딩 교육을 열심히 받는다. AI 모델 성능에 2단계가 1단계 보다 더 중요한 영향을 끼칠까? 결론부터 말하면 그 반대다. 1단계, 즉 데이터가 2단계인 AI 모델 구축보다 훨씬 더 중요하다.
쉬운 예를 들어 보겠다. 딥러닝을 공부할 때 헬로 월드(hello world)와 같은 가장 처음 맞 닿게 되는 MNIST 데이터셋이 있다. MNIST는 간단한 컴퓨터 비전 데이터 셋으로 손으로 쓴 이미지들로 구성됐다. 숫자 단순 거래 예제 0에서 9까지 고정 크기 이미지고 중심에 배치, 표준화돼 있다. 쉽게 설명하면 0~9까지의 손글씨 10개 클래스를 컴퓨터가 맞추는 데이터셋이다. MNIST는 6만개 트레이닝셋과 1만개 테스트셋으로 나눠져 있다. 즉 학습을 위해 6만 개 데이터가 주어지는 것이다. 매우 정형화한 포맷이지만 이를 분류하는 AI 모델을 만들기 위해서는 최소 6만개 정도가 필요하다고 판단된 것이다.
서대호 다겸 대표
MNIST 데이터셋으로 AI 모델을 구축하면 사실 어떤 방식으로 해도 정확도가 96~99% 정도 나온다. 단순 SVM 머신러닝 모델부터 간단한 피드포워드 뉴럴넷, 컨볼루션 뉴럴넷을 섞은 모델까지 모델 네트워크가 복잡하든 단순하든 어떤 테크닉을 섞든 정확도 차이가 크지 않다. 정말 많이 나와봐야 정확도 차이가 2~3% 정도다. 물론 이 2~3%도 엄청나게 큰 수치일 수 있다. 만일 학습셋을 절반으로 줄이면 어떻게 될까? 필자가 글을 쓰면서 해보았다. 똑같은 AI 모델로 원래 98% 나오던 성능이 학습셋을 절반으로 줄이면 97%, 4분의1로 줄이면 96%, 8분의1로 줄이면 94%, 16분의1로 줄이면 93%로 각각 줄었다.
데이터의 절대적인 양도 중요하지만 품질도 중요하다. 데이터에 결측치가 많거나, 라벨링이 잘못되었거나, 같은 클래스 라벨이라도 유사도가 낮으면 데이터가 많아도 AI 모델 성능이 떨어질 수밖에 없다. 따라서 MNIST, CIFAR-10과 같은 예제 학습셋들은 데이터 품질이 최상급인 데이터만 연구자들이 모아 제공하고 있다. 하지만 현실에서는 데이터 품질이 최상급인 데이터를 구하는 것이 쉽지 않다. 당장 절대적인 데이터양을 맞추기도 어렵다.
부족한 학습 데이터셋으로 정확한 AI 모델을 구축하기 위해 가장 보편적으로 활용하는 방법이 전이학습과 파인튜닝이다. 비슷한 용어인데 쉽게 말하면 기존에 학습된 모델을 새로운 목적에 맞는 모델로 구축하기 위해 사용하는 것이다. 즉 제로에서부터 학습을 시작하는게 아니라 7~8정도(10점 만점)부터 학습을 시작한다고 보면 된다. 오픈소스로 다른 연구자들이 몇 백만개의 데이터셋으로 학습해 놓은 모델은 이미 세상의 많은 데이터를 포함하고 있기 때문에 내가 원하는 목적에 맞는 모델을 구축하는데 어느 정도 적용이 가능하다. 따라서 내가 데이터가 1000개밖에 없더라도 기존에 몇 백만개의 데이터로 학습된 모델을 이어받아 학습하면 제로부터 학습하는 것보다 훨씬 더 성능이 잘 나온다.
이에, 연구자들은 자연어처리에는 버트(Bert), 이미지처리에는 Resnet, VGG와 같은 보편적으로 사용하는 모델을 활용하고 있다. 버트 같은 모델은 방대한 학습셋으로 학습한 모델이기에 개인이 만드는 것은 거의 불가능하다.
우리 정부도 학습용 데이터 구축을 위한 지원이 한창인데, 데이터를 구하기 어려운 각 분야별로 기업들이 데이터를 구축해 공공재로 업로드하면 정부가 보조금을 지원하고 있다. 이러한 데이터는 한국어 방언, 고문서 OCR, 제조공장 단순 거래 예제 센서, 헬스케어, 도로교통 등 오픈소스로 구하기가 어렵고 개인이 수집하기 불가능한 데이터 수집을 목표로 하고 있다.
하지만 언제까지 몇몇 오픈 라이브러리 모델 및 정부 보조금에 의지한 학습용 데이터 구축을 기대할 수 없다. 각 기업, 개인들이 자발적인 동기로 서로 데이터를 공유하는 것이 필요하다. 특히 IoT 센서 발달로 이제는 생활 속의 모든 활동이 학습용 데이터로 활용할 수 있다. 시간이 갈수록 더욱 더 많은 데이터가 쌓일 것이고, 이를 AI 모델에 활용하면 세상에 큰 가치를 줄 수 있다. 개인, 기업간 데이터를 자유롭게 주고받으며 거래할 수 있는 플랫폼이 필요하다.
5.4 분류 성능평가¶
분류문제는 회귀 분석과 달리 다양한 성능평가 기준이 필요하다. 이 절에서는 분류문제에 사용되는 다양한 성능평가 기준에 대해 알아본다.
사이킷런 패키지에서 지원하는 분류 성능평가 명령¶
사이킷런 패키지는 metrics 서브패키지에서 다음처럼 다양한 분류용 성능평가 명령을 제공한다.
fbeta_score(y_true, y_pred, beta)
분류결과표¶
분류결과표(Confusion Matrix)는 타겟의 원래 클래스와 모형이 예측한 클래스가 일치하는지는 갯수로 센 결과를 표나 나타낸 것이다. 정답 클래스는 행(row)으로 예측한 클래스는 열(column)로 나타낸다.
정답 클래스가 0, 예측 클래스가 0인 표본의 수
정답 클래스가 0, 예측 클래스가 1인 표본의 수
정답 클래스가 0, 예측 클래스가 2인 표본의 수
정답 클래스가 1, 예측 클래스가 0인 표본의 수
정답 클래스가 1, 예측 클래스가 1인 표본의 수
정답 클래스가 1, 예측 클래스가 2인 표본의 수
정답 클래스가 2, 예측 클래스가 0인 표본의 수
정답 클래스가 2, 예측 클래스가 1인 표본의 수
정답 클래스가 2, 예측 클래스가 2인 표본의 수
예를 들어 정답인 y값 y_true 와 분류 모형이 예측한 값 y_pred 가 다음과 같다고 하자.
이 때 분류결과표는 다음과 같아진다.
첫 행은 실제로 0인 두개의 데이터가 둘 다 정확하게 0으로 예측되었다는 뜻이다. 두번째 행은 실제로 1인 하나의 데이터가 2로 분류되었다는 뜻이다. 마지막 행은 실제로 2인 데이터 3개 중 2개만 정확하게 3으로 분류되었고 하나는 0으로 분류되었다는 뜻이다.
열 기준으로 보면 첫번째 열은 분류 모형이 0이라고 예측한 3개의 데이터 중 2개만 원래 0이었고 하나는 원래 2였다는 뜻이다. 마지막 열은 분류 모형이 2라고 예측한 3개의 데이터 중 2개만 2였고 하나는 1이었다는 의미이다.
이진 분류결과표¶
클래스가 0과 1 두 종류 밖에 없는 이진 분류의 경우에는 일반적으로 클래스 이름을 양성(Positive)와 음성(Negative)로 표시한다. 이 때의 결과를 나타내는 이진 분류결과표(Binary Confusion Matrix)결과표는 다음과 같다.
양성 예측이 맞음 (True Positive)
음성 예측이 틀림 (False Negative)
양성 예측이 틀림 (False Positive)
음성 예측이 맞음 (True Negative)
분류 모형의 예측 결과가 맞은 경우, 즉 양성을 양성이라고 예측하거나 음성을 음성이라고 예측한 경우에는 참(True)라고 하고 예측 결과가 틀린 경우, 즉 양성을 음성이라고 예측하거나 음성을 양성이라고 예측한 경우에는 거짓(False)이라고 한다.
이진분류 시스템의 예¶
제품을 생산하는 제조공장에서는 완성된 제품에 대해 품질 테스트를 실시하여 불량품을 찾아내고 찾아낸 불량품은 공장으로 되돌린다(리콜, recall). 이 때 품질 테스트 결과가 양성이면 불량품이라고 예측한 것이고 음성이고 정상제품이라고 예측한 것이다.
True Positive: 불량품을 불량품이라고 정확하게 단순 거래 예제 예측
True Negative: 정상제품을 정상제품이라고 정확하게 예측
False Positive: 불량품을 정상제품이라고 잘못 예측
False Negative: 정상제품을 불량품이라고 잘못 예측
암(cancer, 악성종양)을 검진할 때도 암에 걸린 것을 양성(陽性, positive)이라하고 걸리지 않은 것을 음성이라고 한다. 종양(tumar)의 양성(良性, benign), 악성(惡性, malignant) 용어와 다르다는 점에 주의하라.
True Positive: 암을 암이라고 정확하게 예측
True Negative: 암이 아닌것을 암이 아니라고 정확하게 예측
False Positive: 암을 암이 아니라고 잘못 예측
False Negative: 암이 아닌것을 암이라고 잘못 예측
FDS(Fraud Detection System)는 금융 거래, 회계 장부 등에서 잘못된 거래, 사기거래를 찾아내는 시스템을 말한다. FDS의 예측 결과가 양성이면 사기거래라고 예측한 것이고 음성이면 정상거래라고 예측한 것이다.
True Positive: 사기를 사기라고 정확하게 예측
True Negative: 정상을 정상이라고 정확하게 예측
False Positive: 정상을 사기라고 잘못 예측
False Negative: 사기를 정상이라고 잘못 예측
사이킷런 패키지에서 제공하는 confusion_matrix 명령을 사용할 때는 클래스 순서가 0, 1, 2, … 순서로 출력되기 때문에 위에서 표시한 표와 다를 수 있으므로 주의해야 한다.
labels 단순 거래 예제 인수를 사용하면 순서를 사용자가 바꿀 수 있다.
이진 분류평가표로부터 하나의 평가점수(score)를 계산하여 그 값을 최종적인 기준으로 사용하는 경우가 많다. 이 때도 관점에 따라 다양한 평가점수가 쓰인다.
정확도(accuracy)는 전체 샘플 중 맞게 예측한 샘플 수의 비율을 뜻한다. 높을수록 좋은 모형이다. 일반적으로 학습에서 최적화 목적함수로 사용된다.
정밀도(precision)은 양성 클래스에 속한다고 출력한 샘플 중 실제로 양성 클래스에 속하는 샘플 수의 비율을 말한다. 높을수록 좋은 모형이다. FDS의 경우, 사기 거래라고 판단한 거래 중 실제 사기 거래의 비율이 된다.
재현율(recall)은 실제 양성 클래스에 속한 표본 중에 양성 클래스에 속한다고 출력한 표본의 수의 단순 거래 예제 비율을 뜻한다. 높을수록 좋은 모형이다. FDS의 경우 실제 사기 거래 중에서 실제 사기 거래라고 예측한 거래의 비율이 된다. TPR(true positive rate) 또는 민감도(sensitivity)라고도 한다.
위양성율(fall-out)은 실제 양성 클래스에 속하지 않는 표본 중에 양성 클래스에 속한다고 출력한 표본의 비율을 말한다. 다른 평가점수와 달리 낮을수록 좋은 모형이다. FDS의 경우에는 실제로는 정상 거래인데 FDS가 사기 거래라고 예측한 거래의 비율이 된다. FPR(false positive rate)또는 1에서 위양성률의 값을 뺀 값을 특이도(specificity)라고도 한다.
정밀도와 재현율의 가중조화평균(weight harmonic average)을 F점수(F-score)라고 한다. 정밀도에 주어지는 가중치를 베타(beta)라고 한다.
베타가 1인 경우를 특별히 F1점수라고 한다.
사이킷런 패키지의 metrics 패키지에서는 정밀도, 재현율, F1점수를 구하는 classification_report 명령을 제공한다. 이 명령은 각각의 클래스를 양성(positive) 클래스로 보았을 때의 정밀도, 재현율, F1점수를 각각 구하고 그 평균값으로 전체 모형의 성능을 평가한다.
위 classification_report 결과에서 0이라고 예측한 데이터의 75%만 실제로 0이었고 1이라고 예측한 단순 거래 예제 데이터의 33%만 실제로 1이었음을 알 수 있다. 또한 실제 0인 데이터 중의 60%만 0으로 판별되었고 실제 1인 데이터 중의 50%만 1로 판별되었음을 알 수 있다.
다중 클래스 문제의 경우에는 각각의 클래스에 대해 자신을 를 양성 클래스로, 다른 클래스를 음성 클래스로 가정하여 OvR 문제를 풀고 각각에 대해 정밀도, 재현율, 위양성률 등의 평가점수를 구한다. 이렇게 하면 클래스별로 각각 다른 평가점수가 나오므로 이를 하나로 합쳐는 일종의 평균을 구해야 하는데 다음과 같은 여러가지 기준을 사용한다.
weighted : 각 클래스에 속하는 표본의 갯수로 가중평균
accuracy : 정확도. 전체 학습데이터의 개수에서 각 클래스에서 자신의 클래스를 정확하게 맞춘 개수의 비율.
ROC 커브¶
위에서 설명한 각종 평가 점수 중 재현율(recall)과 위양성률(fall-out)은 일반적으로 양의 상관 관계가 있다.
재현율을 높이기 위해서는 양성으로 판단하는 기준(threshold)을 낮추어 약간의 증거만 있어도 양성으로 판단하도록 하면 된다. 그러나 이렇게 되면 음성임에도 양성으로 판단되는 표본 데이터가 같이 증가하게 되어 위양성율이 동시에 증가한다. 반대로 위양성율을 낮추기 위해 양성을 판단하는 기준을 엄격하게 두게 되면 증거 부족으로 음성 판단을 받는 표본 데이터의 수가 같이 증가하므로 재현율이 떨어진다.
ROC(Receiver Operator Characteristic) 커브는 클래스 판별 기준값의 변화에 따른 위양성률(fall-out)과 재현율(recall)의 변화를 시각화한 것이다.
모든 이진 분류 모형은 판별 평면으로부터의 거리에 해당하는 판별함수(discriminant function)를 가지며 판별함수값이 음수이면 0인 클래스, 양수이면 1인 클래스에 해당한다고 판별한다. 즉 0 이 클래스 판별 기준값이 된다. ROC 커브는 이 클래스 판별 기준값이 달라진다면 판별 결과가 어떻게 달라지는지는 표현한 것이다.
사이킷런 패키지의 분류모형 클래스는 판별함수값을 계산하는 decision_function 메서드를 제공한다. 다음 표는 분류문제를 풀고 decision_function 메서드를 이용하여 모든 표본 데이터에 대해 판별함수값을 계산한 다음 계산된 판별함수값이 가장 큰 데이터부터 가장 작은 데이터 순서로 정렬한 것이다.
f | y_hat | y | |
---|---|---|---|
0 | 2.167628 | 1.0 | 1.0 |
1 | 1.861485 | 1.0 | 1.0 |
2 | 1.482220 | 1.0 | 1.0 |
3 | 1.447944 | 1.0 | 1.0 |
4 | 1.432822 | 1.0 | 1.0 |
5 | 1.035662 | 1.0 | 1.0 |
6 | 0.244729 | 1.0 | 0.0 |
7 | -0.063016 | 0.0 | 1.0 |
8 | -0.582239 | 0.0 | 0.0 |
9 | -0.878385 | 0.0 | 0.0 |
10 | -1.027759 | 0.0 | 1.0 |
11 | -1.153074 | 0.0 | 0.0 |
12 | -1.332066 | 0.0 | 0.0 |
13 | -1.526433 | 0.0 | 0.0 |
14 | -2.175147 | 0.0 | 0.0 |
15 | -4.148556 | 0.0 | 0.0 |
ROC 커브는 이 표를 이용하여 다음과 같이 작성한다.
현재는 0을 기준값(threshold)으로 클래스를 구분하여 판별함수값이 0보다 크면 양성(Positive), 작으면 음성(negative)이 된다.
데이터 분류가 다르게 되도록 기준값을 증가 혹은 감소시킨다. 위의 표에서는 기준값을 0.244729보다 크도록 올리면 6번 데이터는 더이상 양성이 아니다.
기준값을 여러가지 방법으로 증가 혹은 감소시키면서 이를 반복하면 여러가지 다른 기준값에 대해 분류 결과가 달라지고 재현율, 위양성률 등의 성능평가 점수도 달라진다.
Forecasting: Principles and Practice
지금까지, 비-계절성 데이터와 비-계절성 ARIMA 모델에만 관심을 두었습니다. 하지만, ARIMA 모델로 다양한 종류의 계절성 데이터를 모델링 할 수도 있습니다.
계절성 ARIMA 모델은 지금까지 살펴본 ARIMA 모델에 추가적인 계절성 항을 포함하여 구성됩니다. 계절성 ARIMA 모델을 다음과 같이 쓸 수 있습니다:
ARIMA | \(\underbrace<(p, d, q)>\) | \(\underbrace<(P, D, Q)_ |
\(<\uparrow>\) | \(<\uparrow>\) | |
모델의 | 모델의 | |
비 계절성 부분 | 계절성 부분 |
여기에서 \(m\) 은 매년 관측값의 개수입니다. 모델의 계절성 부분에 대문자 기호를 사용하고, 모델의 비-계절성 부분에서는 소문자 기호를 사용하겠습니다.
모델의 계절성 부분은 모델의 비-계절성 성분과 비슷한 항으로 구성됩니다만, 계절성 주기의 후방이동(backshift)을 포함합니다. 예를 들어, (상수가 없는) ARIMA(1,1,1)(1,1,1) \(_\) 모델은 분기별 데이터( \(m=4\) )에 대한 경우이고 다음과 같이 쓸 수 있습니다. \[ (1 - \phi_B)~(1 - \Phi_B^) (1 - B) (1 - B^)y_ = (1 + \theta_B)~ (1 + \Theta_B^)\varepsilon_. \]
단순히 추가적인 계절성 항을 비-계절성 항에 곱합니다.
ACF/PACF
AR이나 MA 모델의 계절성 부분은 PACF와 ACF의 계절성 시차에서 볼 수 있을 것입니다. 예를 들면, ARIMA(0,0,0)(0,0,1) \(_\) 모델은 다음과 같은 모습을 나타낼 것입니다:
- ACF에 시차 12에서 나타나는 뾰족한 막대는 있지만 다른 유의미한 뾰족한 막대는 없는 모습;
- PACF의 계절성 시차가 지수적으로 감소하는 모습(즉, 시차 12, 24, 36, …).
비슷하게, ARIMA(0,0,0)(1,0,0) \(_\) 모델은 다음과 같은 모습을 나타낼 것입니다:
- ACF의 계절성 시차가 지수적으로 감소하는 모습;
- PACF에 시차 12에서 나타나는 유의미한 뾰족한 막대가 있는 모습.
계절성 ARIMA 모델에서 적절한 계절성 차수를 고려할 때, 계절성 시차를 고려하는 것에 주의하시길 바랍니다.
모델링 과정은 모델의 비-계절성 성분과 계절성 AR과 MA 항을 골라야 하는 것을 제외하고는 비-계절성 데이터에 대한 경우와 거의 같습니다. 예제를 통해 이러한 과정을 잘 익힐 수 있습니다.
예제: 유럽 분기별 소매 거래
1996년부터 2011년까지 분기별 유럽 소매 거래 데이터를 이용하여 계절성 ARIMA 모델링 과정을 설명하겠습니다. 그림 8.17에 데이터를 나타냈습니다.
Figure 8.17: 유로 지역 (17개 국가) 1996–2011 기간 동안 도매와 소매 거래를 포함하고, 자동차와 오토바이 수리에 대한 분기별 소매 거래 지수. (지수: 2005 = 100).
데이터가 정상성을 나타내지 않는다(non-stationary)는 것을 분명하게 알 수 있고 약간의 계절성도 보입니다. 따라서 먼저 계절성 차분을 구할 것입니다. 계절성으로 차분을 구한 데이터를 그림 8.18에 나타냈습니다. 이것도 정상성을 나타내지 않는 것 같기 때문에, 1차 차분을 한 번 더 구하여 그림 8.19에 나타냈습니다.
Figure 8.18: 계절성 차분을 구한 유럽 소매 거래 지수..
Figure 8.19: 두 번 차분을 구한 유럽 소매 거래 지수.
이제 그림 8.19에 나타낸 ACF와 PACF에 기초하여 적절한 ARIMA를 찾아봅시다. ACF에서 시차 1의 유의미하게 뾰족한 막대가 비-계절성 MA(1) 성분을 암시하고, ACF에서 시차 4의 유의미하게 뾰족한 막대는 계절성 MA(1) 성분을 암시합니다. 이를 통해, 1차 차분과 계절성 차분을 나타내는 ARIMA(0,1,1)(0,1,1) \(_4\) 모델과 비-계절성과 계절성 MA(1) 성분을 가지고 시작합니다. 그림 8.20에 맞춘 모델에 대한 잔차를 나타내었습니다. (비슷한 방법으로 PACF를 적용하면, ARIMA(1,1,0)(1,1,0) \(_4\) 모델로 시작할 수 있습니다.)
Figure 8.20: 유럽 소매 거래 지수 데이터에 대해 맞춘 ARIMA(0,1,1)(0,1,1) \(_4\) 모델의 잔차.
ACF와 PACF 둘 다 시차 2에서 유의미하게 뾰족한 막대가 나타나고 시차 3에서 덜 유의미하지만 뾰족한 막대가 나타나는 것을 보여줍니다. 이것은 몇몇 추가적인 비-계절성 항이 모델에 단순 거래 예제 추가되어야 한다는 것을 의미합니다. ARIMA(0,1,3)(0,1,1) \(_4\) 모델의 AICc 값은 68.53인데, ARIMA(0,1,2)(0,1,1) \(_4\) 모델의 AICc는 74.36입니다. AR 항이 있는 다른 모델도 시도해봤지만, AICc 값이 더 작은 경우는 없었습니다. 결론적으로, ARIMA(0,1,3)(0,1,1) \(_4\) 모델을 골랐습니다. 그림 8.21에 잔차를 나타냈습니다. 모든 뾰족한 막대가 이제 유의미한 범위 안에 들어오고, 따라서 잔차는 백색잡음처럼 보입니다. 융-박스(Ljung-Box) 검정 결과도 잔차에 자기상관값이 남아있지 않다는 것을 보여줍니다.
Figure 8.21: 유럽 소매 거래 지수 데이터에 대해 맞춘 ARIMA(0,1,3)(0,1,1) \(_4\) 모델의 잔차.
따라서, 필요한 확인 절차를 거친 계절성 ARIMA 모델을 얻었고 이것으로 예측할 준비가 됐습니다. 모델로 얻은 다음 3년에 대한 예측값은 그림 8.22에 나타냈습니다. 두 번 차분을 구한 것 때문에 예측값이 데이터의 최근 추세를 따라갑니다. 크고 급격하게 증가하는 예측 구간은 소매 거래 지수가 어느때나 증가하기 또는 감소하기 시작할 수 있다는 것을 나타냅니다 — 반면에, 점 예측값은 하향세를 나타내지만, 예측구간에서 보면 데이터가 예측 기간 동안에 상향 추세를 갖는 것도 가능합니다.
Figure 8.22: ARIMA(0,1,3)(0,1,1) \(_4\) 모델을 이용하여 얻은 유럽 소매 거래 지수 데이터 예측값. 80%와 95% 예측구간을 나타냈습니다.
이 작업 대부분을 수행하기 위해 auto.arima() 을 사용할 수도 있습니다. 이 함수를 사용하면 같은 결과를 얻습니다.
auto.arima() 함수는 \(D\) (사용할 계절성 차분 횟수)를 결정하기 위해 nsdiffs() 를 사용하고, \(d\) (보통 차분의 횟수)를 결정하기 위해 ndiffs() 를 사용합니다. 다른 모델 매개변수는 ( \(p,q,P,Q\) ) 비-계절성 ARIMA 모델처럼 모두 AICc를 최소화하여 결정합니다.
예제: 호주 코르티코 스테로이드 약물 판매량
두 번째 예제는 좀 더 어렵습니다. 호주에서 코르티코 스테로이드 (Corticosteroid) 약물이 매월 팔린 양을 예측하려고 합니다. 해부학적 치료용 화학 약품 분류 체계(Anatomical Therapeutic Chemical classification scheme)에서 H02 약물들로 분류된 것으로 알려져있습니다.
Figure 8.23: 호주 코르티코 스테로이드 약물 판매량 (단위: 백만 처방전/월). 로그를 취한 값은 아래쪽에 나타냈습니다.
그림 8.23에 1991년 7월부터 2008년 6월까지의 데이터를 나타냈습니다. 수준의 분산이 조금 증가합니다. 따라서 분산을 안정화시키기 위해 로그를 취하겠습니다.
데이터에는 계절성이 강하게 나타납니다. 그리고 데이터에 정상성이 나타나지 않는다는 것이 분명합니다. 그래서 계절성 차분을 사용할 것입니다. 계절성 차분을 구한 데이터를 그림 8.24에 나타냈습니다. 아직까지는 차분을 더 구해야하는지 여부를 분명하게 알기 어렵습니다. 차분을 더 계산하지 않기로 결정하지만, 확실한 선택은 아닙니다.
마지막 몇몇 관측값은 초반부의 데이터와 다른 것처럼 보입니다(더 변동이 큰 것 같은). 초반 판매량 보고가 늦어져서 데이터가 때때로 수정되는 것 때문에 생기는 현상일 수도 있습니다.
Figure 8.24: 계절성 차분을 구한 호주 코르티코 스테로이드 약물 판매량 (단위: 백만 처방전/월).
계절성 차분을 구한 데이터를 나타내는 그래프에서, PACF를 보니 시차 12와 시차 24에서 뾰족한 막대가 있습니다만, ACF를 보니 다른 계절성 시차에서는 나타나지 않습니다. 이 사실은 계절성 AR(2) 항을 암시합니다. 비-계절성 시차에서는, PACF를 보면 유의미하게 뾰족한 막대가 3개 있습니다. 이것은 AR(3) 항이 가능하다는 것을 암시합니다. ACF에서 나타나는 패턴은 어떠한 단순한 모델을 가리키지는 않습니다.
결과적으로, 초기 분석은 이러한 데이터에 가능한 모델이 ARIMA(3,0,0)(2,1,0) \(_\) 라는 것을 시사합니다. 이 모델에 몇몇 변형을 준 것과 함께 이 모델을 맞추고, AICc 값을 계산하여 다음의 표에 나타냈습니다.
Model | AICc |
---|---|
ARIMA(3,0,1)(0,1,2) \(_\) | -485.5 |
ARIMA(3,0,1)(1,1,1) \(_\) | -484.2 |
ARIMA(3,0,1)(0,1,1) \(_\) | -483.7 |
ARIMA(3,0,1)(2,1,0) \(_\) | -476.3 |
ARIMA(3,0,0)(2,1,0) \(_\) | -475.1 |
ARIMA(3,0,2)(2,1,0) \(_\) | -474.9 |
ARIMA(3,0,1)(1,1,0) \(_\) | -463.4 |
이러한 모델 중에서 ARIMA(3,0,1)(0,1,2) \(_\) 모델이 가장 좋습니다(즉, 가장 작은 AICc값을 갖습니다).
Figure 8.25: ARIMA(3,0,1)(0,1,2) \(_\) 모델을 H02 월별 처방전 판매량 데이터에 적용한 결과의 잔차.
이 모델에서 잔차는 그림 8.25에 나타냈습니다. ACF를 보면 유의미하게 뾰족한 막대가 몇 개 있고, 모델은 융-박스(Ljung-Box) 검정을 통과하지 못했습니다. 여전히 모델을 예측에 사용할 수 있지만, 보정된 잔차 때문에 예측구간이 정확하지 않을 수 있습니다.
다음은 자동 ARIMA 알고리즘을 사용하여 시도해볼 것입니다. 모든 입력값을 기본 설정값으로 두고 auto.arima() 를 돌리면 ARIMA(2,1,1)(0,1,2) \(_\) 모델을 얻습니다. 하지만, 이 모델은 여전히 시차 36에 대해 융-박스(Ljung-Box) 검정을 통과하지 못합니다. 때때로 모든 검정을 통과하는 모델을 찾지 못할 수도 있습니다.
테스트 데이터 평가:
데이터의 마지막 2년으로 구성된 테스트 데이터를 이용하여 지금까지 맞춘 모델 중 몇 가지를 비교하려고 합니다. 따라서, 단순 거래 예제 1991년 7월부터 2006년 6월까지의 데이터를 이용하여 모델을 맞추고, 2006년 7월부터 2008년 6월까지의 판매량을 예측하겠습니다. 결과는 표 8.2에 요약하였습니다.
모델 | RMSE |
---|---|
ARIMA(3,0,1)(0,1,2) \(_\) | 0.0622 |
ARIMA(3,0,1)(1,1,1) \(_\) | 0.0630 |
ARIMA(2,1,3)(0,1,1) \(_\) | 0.0634 |
ARIMA(2,1,1)(0,1,2) \(_\) | 0.0634 |
ARIMA(2,1,2)(0,1,2) \(_\) | 0.0635 |
ARIMA(3,0,3)(0,1,1) \(_\) | 0.0637 |
ARIMA(3,0,1)(0,1,1) \(_\) | 0.0644 |
ARIMA(3,0,2)(0,1,1) \(_\) | 0.0644 |
ARIMA(3,0,2)(2,1,0) \(_\) | 0.0645 |
ARIMA(3,0,1)(2,1,0) \(_\) | 0.0646 |
ARIMA(4,0,2)(0,1,1) \(_\) | 0.0648 |
ARIMA(4,0,3)(0,1,1) \(_\) | 0.0648 |
ARIMA(3,0,0)(2,1,0) \(_\) | 0.0661 |
ARIMA(3,0,1)(1,1,0) \(_\) | 0.0679 |
RMSE 값을 기준으로 볼 때 직접 고른 모델과 auto.arima() 둘 다 상위 4개의 모델에 포함됩니다.
AICc 값으로 모델을 비교할 때, 모든 모델을 같은 차수로 차분을 구한 것이 중요합니다. 하지만, 테스트 데이터을 사용하여 모델을 비교할 때, 예측값이 어떻게 나왔는지가 중요하지 않습니다 — 이러한 비교가 항상 유효합니다. 결과적으로, 위의 표에서, 계절성 차분만 고려한 몇몇 모델과 1차 차분과 계절성 차분 둘 다 고려한 몇몇 모델을 포함시킬 수 있습니다. 반면에, AICc 값을 포함하는 이전의 표에서는 1차 차분은 비교 대상에 포함하지 않고 계절성 차분을 고려한 모델만 비교했습니다.
살펴본 모델 중에서 어떠한 것도 잔차 검정을 전부 통과하지 못했습니다. 실제 상황에서, 보통은 모델이 모든 검정을 통과하지 못하더라도 찾을 수 있었던 가장 좋은 모델을 사용합니다.
(테스트 데이터에 대해 가장 낮은 RMSE 값과 계절성 차분을 고려한 모델 중에서 가장 좋은 AICc 값을 갖는) ARIMA(3,0,1)(0,1,2) \(_\) 모델로 얻은 예측값을 그림 8.26에 나타냈습니다.
Figure 8.26: ARIMA(3,0,1)(0,1,2) \(_\) 모델을 H02 월별 처방전 판매량 데이터에 적용한 결과로부터 얻은 예측값.
bybit. BTCUSD , BTCUSDT 차이점. 주문 수량 단위 단순명료 이해.
아래 설명은 인버스 종목 중 BTCUSD를 예를들어 설명하나, 다른 인버스 종목 ETHUSD, XRPUSD, EOSUSD 모두 동일.
바이빗의 BTCUSD vs. BTCUSDT 종목
- BTCUSDT : 결제통화 USDT, 주문수량 단위 BTC ,
- BTCUSD : 결제통화 BTC , 주문수량단위 USD,
아래 바이빗 주문창에서 보면 이해 하기 쉽다.
BTCUSDT 주문창. 매매할려면 현물 USDT 필요.
BTC 1개의 가치가 38000 USDT 일때 BTC 0.026 개 거래하겠다는 것이므로 필요한 현물 USDT 는 38000 USDT x 0.026 BTC = 988 USDT 요구됨. 매수(혹은 매도) 했다면 나의 현물 USDT 988 은 줄어들고 BTCUSDT 0.026 개 매수(혹은 매도) 포지션 생긴것.
BTCUSD 주문창. 매매할려면 현물 BTC 필요.
BTC 1개의 달러 가치 38000 USD 일때 1000 USD 에 해당하는 BTC 수량을 거래하겠다는 것이므로 1000 usd / 38000 usd 에 해당하는 BTC 수량 0.02631 거래하겠다는 의미. 매수(혹은 매도)했다면 나의 현물 BTC 0.02631 줄어들고 BTCUSD 0.02631 만큼 매수(혹은 매도) 포지션 생긴것.
BTCUSD 매매 핵심요점.
BTCUSD 매매에서 주문수량(단위 USD) 만큼 매수 매도 한다는 의미는 주문수량의 USD 에 해당하는 BTC 수량 을 매수, 매도 하는것.
1 BTC 가치가 1만 USD 인 시점에 수량 1만 USD "매수" 의미는 1만달러에 해당하는 BTC 1개 를 "매수" 하는것. - 단순 거래 예제 달러를 매수하는것 아님.
1 BTC 가치가 2만 USD 인 시점에 수량 1만 USD "매도" 의미는 1만달러에 해당하는 BTC 0.5개 를 "매도" 하는것. -달러를 매도 하는것 아님.
BTCUSDT 매매 핵심요점.
BTCUSDT 매매에서 주문수량(단위 BTC) 만큼 매수 매도 한다는 의미는 주문수량의 BTC 그대로 BTC 수량 매수, 매도 하는것. 즉, 주문수량에 기록한 것이 실거래 대상이라 점이 BTCUSD와는 다르다.
1 BTC 가치가 1만 USD 인 시점에 수량 1 BTC "매수" 의미는 주문 수량 그대로 1BTC 를 "매수"하는것.
1 BTC 가치가 2만 USD 인 시점에 수량 1 BTC "매도" 의미는 주문 수량 그대로 1BTC 를 "매도" 하는것.
BTCUSD , BTCUSDT 수익액 계산식.
BTCUSD | BTCUSDT |
매수진입 | 수익BTC=수량USD x (1/진입가 - 1/청산가) |
수익USD=수량USD x (청산가/진입가 - 1)
수익USD=수량USD x (1-청산가/진입가)
* USD단위의 수익은 BTCUSD, BTCUSDT 모두 청산가와 선형관계임.
* BTCUSDT 의 결제통화 USDT 기준 수익액은 가격변화 그대로 수익에 해당하며. 비율1의 선형비례 관계, 통상적인 개념임.
* BTCUSD 의 결제통화 BTC 기준 수익액은 가격변화와 비율1의 선형비례 관계 아님.
( BTC 기준 수익액은 선형비례하지 않지만 USD 기준 수익액은 가격변화와 비율 1로 선형비례한다. )
그래서, 뭘 매매하는게 좋음? BTCUSD ? BTCUSDT ?
아래 본인의 기준에 따라 선택하면 됨.
BTCUSD 매매하는 경우.
- BTCUSD는 비트코인이 결제통화 이고 매매수익도 비트코인으로 받는것이 핵심.
- 비트코인이 장기적으로 상승할 것으로 판단한 사람은 자신 보유한 비트코인을 원화나 달러로 환전하고 싶지 않을것이다(원화로 환전하고 얼마 지나지 않아 가격 올라서 속상한 경우 많았음.) 보유한 비트코인 갖고만 있다고 해서 가치는 오르겠지만 비트코인 수량이 늘지는 않는다. 매매로 비트코인을 더 늘리고 싶은 경우 본인 단순 거래 예제 보유한 비트코인으로 BTCUSD 를 매매하면서 비트코인 수량을 늘린다. 이런 경우 매수진입위주로 매매 하게 될 것이다.
- 현물 비트코인 매수해둔 것이 있는데 비트코인 가격이 너무 하락해서 더 구입하고 싶은데 추가 매수할 시드(법정화폐 원화, 달러..)가 없는 경우에도 비트코인이 결제통화인 BTCUSD 를 내가 보유한 비트코인으로 매수하고 가격 상승시 단순 거래 예제 매도 하면서 비트코인 수량 늘리는 매매용도로 활용할 수 있다.
각 국가의 법정 통화(원화, 달러, 엔화, 유로. ) 대비 비트코인 의 가치가 얼마냐? 이것에 목맬 필요없다. 법정통화든 암호화폐든 뭐든 화폐들의 수량 늘리기 트레이딩에 집중하는게 타당하다. 비록 현재 달러대비 비트코인 가치가 하락했다고 해도 초기 내가 보유 했었던 (달러 수량 + 비트코인수량 )이 줄지 않았다면 매매 못하고 있는 것은 아니다.
BTCUSDT 매매하는 경우.
- BTCUSDT 는 달러(USDT)가 결제통화이고 매매수익도 달러(USDT)로 받는 것이 핵심.
- 비트코인이 장기적으로 크게 상승할것 같지도 않고 대하락 혹은 오르락 내리락 할것으로 여기는 경우에 BTCUSDT 를 매도 위주로 매매하면서 달러 수량을 늘린다.
BTCUSD, BTCUSDT 2개 모두 번갈아 가면서 매매하는 경우.
본인이 상승구간, 하락구간 판단 가능한 경우에 적합한 매매방법. 이 방법는 달러도 늘리고 비트코인 모두 수량 늘릴 수 있는 최적의 방식.
- 비트코인 상승구간에는 BTCUSD 매수진입으로 대응하면서 비트코인 수량 늘리기.
- 비트코인 하락구간으로 여겨지는 경우 상기 1에서 늘려둔 비트코인을 USDT 로 환전하고, BTCUSDT 매도진입위주로 달러 수량 늘리기. 이 과정에서 달러가 늘어났다는 것은 비트코인 가격이 많이 하락했다는 의미. 비트코인의 매수 기회가 온 것임. 모아둔 달러를 비트코인으로 환전하여 다시 BTCUSD 매수 대응하면서 이전보다 더 많은 비트코인 수량을 가질 수 있다.
거래소. bybit. 바이빗. 개요. 가입방법. 암호화폐
바이빗 거래소 주요특징. - 거래가능 종목 : - BTCUSD , ETHUSD , EOSUSD , XRPUSD - 최대 레버리지 100 까지 가능 매매자가 레버리지 사용 유무 선택가능. 바이빗 레버리지 상세 - - 장점 : 레버리지 1에서
- 암호화폐 매매 관련 정보 정리 - 암화폐거래소. - 암호화폐 API 등. - 접근성 좋은 거래소 쾌적한 매매 환경이 장점 - 유동성 풍부. 변동성 양호. - 완전한 연속거래시장. 거래 휴일 없음. 암호화폐
암호화폐 . 환율 트레이딩. 기준통화 상대통화 . 개념 정리 .
개요 아래 용어들 개념 정리. - 화폐, 통화, 법정화폐, - 환율, 기준 통화, 상대 통화. - 환율 트레이딩 - 현물 . 화폐, 통화 , 환율, 기준통화/상대통화 - Currency, Exchange Rate , Base Currency, Quote Curre..
0 개 댓글