대학 전공서적, 기술서적 무료 다운로드 사이트 및 기타

LibGen(Library Gernesis)이라는 사이트에서 받으면 됩니다.

러시아 사이트인 것 같습니다.

https://libgen.is/

Z=library도 유명합니다.

https://z-lib.is/

논문 받는 곳은 다들 아시는

https://sci-hub.se/

그리고 논문의 Impact를 알아보는 Journal Impact Search 입니다.

https://www.bioxbio.com/

저널의 랭킹을 보는 곳은 SJR

https://www.scimagojr.com/journalrank.php

PySpark lit 메쏘드

pyspark에서 .lit()는 문자열의 값을 모두 채워서 컬럼으로 만들어주는 메소드입니다.

다음과 같이 사용합니다.

import pyspark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('SparkByExamples.com').getOrCreate()
data = [("111",50000),("222",60000),("333",40000)]
columns= ["EmpId","Salary"]
df = spark.createDataFrame(data = data, schema = columns)

더 자세한 것은 아래의 블로그를 참고하세요.

https://cosmosproject.tistory.com/291

ls: cannot open directory .: Stale file handle

ls: cannot open directory .: Stale file handle

Linux에서 파일 목록을 확인하다가 위와 같은 오류가 보일 때가 있습니다.

원인

  • NFS(네트워크 스토리지)가 순간적으로 접속이 끊겼거나 마운트가 해제되었을 때
  • ls 하는 디렉토리가 삭제된 경우

해결책은 마운트를 점검하거나 다른디렉토리로 이동한 후 다시 해보면 되는 것이 전부입니다.

Python으로 Click Prediction 모델 만들기

Click Prediction 모델 만들기

Click Prediction 모델은 사용자가 클릭할 가능성이 높은 광고를 예측하는 기계학습 모델을 말합니다.

광고 뿐만 아니라 쇼핑몰의 상품배열이나 노출, 검색 결과의 노출 여부나 랭킹에서도 많이 쓰입니다.

네이버쇼핑, 쿠팡 같은 이커머스(e-commerce)에서도 매우 중요하게 쓰이는 기계학습 콤포넌트입니다.

Python을 사용하여 Click Prediction 모델을 만드는 간단한 예제입니다.

데이터 불러오기

Click Prediction 모델을 만들기 위해서는 먼저 데이터를 불러와야 합니다. 이번 예제에서는 Kaggle에서 제공하는 Click Prediction 데이터를 사용하겠습니다. 데이터는 다음과 같은 링크에서 다운로드할 수 있습니다: https://www.kaggle.com/c/avazu-ctr-prediction/data.

import pandas as pd

data = pd.read_csv('train.csv', nrows=100000)

여기서 train.csv는 데이터 파일의 경로를 의미합니다. nrows 파라미터를 사용하여 데이터의 일부분만 불러올 수 있습니다.

데이터 전처리

모델을 만들기 위해서는 데이터를 전처리해야 합니다. 이번 예제에서는 데이터에서 필요한 feature만 추출하고, 범주형 변수를 One-Hot Encoding하는 것으로 전처리를 마칩니다.

features = ['C1', 'banner_pos', 'site_category', 'app_category', 'device_type', 'device_conn_type']
data = pd.get_dummies(data[features])

데이터에서 features에 해당하는 feature만 추출하고, pd.get_dummies() 함수를 사용하여 범주형 변수를 One-Hot Encoding합니다.

모델 학습

전처리된 데이터를 기반으로 모델을 학습합니다. 이번 예제에서는 LightGBM이라는 머신러닝 라이브러리를 사용하여 모델을 학습합니다.

import lightgbm as lgb

X = data.drop('click', axis=1)
y = data['click']

train_data = lgb.Dataset(X, label=y)

params = {
    'objective': 'binary',
    'metric': 'auc',
    'boosting_type': 'gbdt',
}

model = lgb.train(params, train_data, num_boost_round=100)

전처리된 데이터에서 click feature를 제외한 나머지 feature를 X에 저장하고, click feature를 y에 저장합니다. 그리고 lgb.Dataset() 함수를 사용하여 학습 데이터를 생성합니다. 생성된 학습 데이터를 기반으로 모델을 학습합니다.

모델 평가

학습된 모델을 평가합니다. 이번 예제에서는 AUC(Area Under the Curve)를 사용하여 모델을 평가합니다.

from sklearn.metrics import roc_auc_score

y_pred = model.predict(X)
roc_auc_score(y, y_pred)

AUC가 높을수록 모델의 성능이 좋다는 것을 의미합니다.

모델 예측

학습된 모델을 사용하여 Click Prediction을 수행합니다.

test_data = pd.read_csv('test.csv')
test_data = pd.get_dummies(test_data[features])

y_pred = model.predict(test_data)

test.csv 파일을 불러와서 전처리를 한 후, 학습된 모델로 Click Prediction을 수행합니다.

이상으로 Python을 사용하여 Click Prediction 모델을 만드는 예제를 마치겠습니다.

이 예제를 참고하여, 다양한 Click Prediction 만들어 볼 수 있겠습니다.

그리고, 이 예제에서는 LightGBM 라이브러리를 사용하여 모델을 학습하였지만, 다른 머신러닝 라이브러리 또한 사용할 수 있습니다. 이를 통해, 다양한 머신러닝 라이브러리를 비교하여 어떤 라이브러리가 Click Prediction 모델에 더 적합한지 알아볼 수 있습니다.

매크로 평균(Macro-average)과 마이크로 평균(Micro-average)

머신 러닝 분야에서 평가 지표는 모델이 얼마나 잘 동작하는지를 측정하는 데 중요한 역할을 합니다. 이 중에서도 다중 클래스 분류 문제에서는 클래스별 성능을 평가하는 데 있어서 다양한 방법들이 있습니다. 그 중에서도 대표적으로 사용되는 방법으로는 Macro-average와 Micro-average가 있습니다.

Macro-average 매크로 평균

Macro-average는 클래스별 성능 지표를 각각 계산한 후 평균을 내는 방식입니다. 이 방법은 클래스별 데이터 셋이 균등하게 분포되어 있을 때 적합합니다. 예를 들어, 10개의 클래스가 있는 다중 클래스 분류 문제에서 5개의 클래스는 100개의 데이터를 가지고 있고, 나머지 5개의 클래스는 10개의 데이터만 가지고 있다고 가정해 봅시다. 이 경우, Macro-average는 모든 클래스의 성능을 동일하게 취급하므로, 각 클래스의 데이터 수에 관계 없이 모든 클래스가 동일한 비중으로 반영됩니다.

다음은 Macro-average를 계산하는 과정입니다. 클래스 개수가 k개라고 할 때,

  1. 클래스별로 TP(True Positive), FP(False Positive), FN(False Negative), TN(True Negative)를 계산합니다.
  2. Precision, Recall, F1-score 등 성능 지표를 클래스별로 계산합니다.
  3. 클래스별로 계산된 지표들을 모두 더한 후 클래스 수(k)로 나눕니다.

Micro-average 마이크로 평균

Micro-average는 클래스별로 성능 지표를 계산하기 전에 모든 클래스를 하나의 클래스로 간주하고 전체적인 성능 지표를 계산합니다. 이 방법은 클래스별 데이터 수가 다르더라도 모든 클래스의 성능을 동일하게 고려하므로, 클래스별 데이터 수가 차이가 많이 나는 문제에서 유용합니다.

다음은 Micro-average를 계산하는 과정입니다.

  1. 전체 데이터셋에서 TP, FP, FN, TN을 계산합니다.
  2. Precision, Recall, F1-score 등 성능 지표를 전체 데이터셋에 대해 계산합니다.

이제 간단한 예시를 들어보겠습니다. 다음과 같은 3개의 클래스(0, 1, 2)가 있고, 각각의 클래스에 대해 TP, FP, FN, TN의 개수가 다음과 같다고 가정해 봅시다.

클래스TPFPFNTN
0102385
1154781
281494

이 경우, Macro-average와 Micro-average를 각각 계산해 보겠습니다.

Macro-average 계산

  1. 클래스별 TP, FP, FN, TN 계산
클래스TPFPFNTN
0102385
1154781
281494
  1. 클래스별 Precision, Recall, F1-score 계산
클래스PrecisionRecallF1-score
00.83330.76920.8000
10.78950.68180.7317
20.88890.66670.7619
  1. 모든 클래스의 지표를 더한 후 클래스 수로 나눔

$$ \text{Macro-average Recall} = \frac{0.7692+0.6818+0.6667}{3} = 0.706 \\\\ \text{Macro-average F1-score} = \frac{0.8000+0.7317+0.7619}{3} = 0.764 $$

Micro-average 계산

1. 전체 데이터셋에서 TP, FP, FN, TN 계산

전체 데이터셋TPFPFNTN
33714260

2. 전체 데이터셋에서 Precision, Recall, F1-score 계산

$$ \text{Micro-average Precision} = \frac{33}{33+7} = 0.825 \\\\ \text{Micro-average Recall} = \frac{33}{33+14} = 0.702 \\\\ \text{Micro-average F1-score} = 2 \times \frac{0.825 \times 0.702}{0.825 + 0.702} = 0.759 $$

이처럼 average Micro-average는 다중 클래스 분류 문제에서 클래스별 성능을 평가하는 데 사용되는 방법 중 두 가지입니다. Macro-average는 클래스별 데이터셋이 균등하게 분포되어 있을 때 유용하며, Micro-average는 클래스별 데이터 수가 차이가 많이 나는 문제에서 유용합니다.

계산 법의 선택

어떤 방법을 선택할지는 데이터셋의 특성에 따라 달라질 수 있습니다.

예를 들어, 클래스별로 데이터 수가 크게 차이가 나지 않고 균등하게 분포된 경우에는 Macro-average를 사용하는 것이 적절할 수 있습니다.

반면에 클래스별로 데이터 수가 크게 차이가 나는 경우에는 Micro-average가 더 적절할 수 있습니다.

클래스별로 데이터가 균등한지 아닌지는 카이제곱검정을 하면 알 수 있습니다.

또한, Macro-average는 클래스별 성능을 독립적으로 평가하기 때문에, 각 클래스가 동등하게 중요한 경우에 적합합니다. 반면에 Micro-average는 모든 클래스가 동일한 중요도를 가지는 것이 아니라, 전체적인 성능이 중요한 경우에 적합합니다.

마지막으로, Macro-average와 Micro-average는 모델의 성능을 평가하기 위해 단독으로 사용하기 보다는, 다른 지표와 함께 사용하는 것이 좋습니다. 또한, 클래스별로 데이터 수가 매우 작거나 없는 경우에는 이를 해결하기 위해 Weighted average 방법을 사용하기도 합니다. 이는 클래스별 데이터 수를 고려하여 평균을 계산하는 방법으로, Macro-average와 Micro-average의 중간 형태라고 볼 수 있습니다. 이러한 방법들을 적절히 사용하여 다중 클래스 분류 모델의 성능을 정확하게 평가할 수 있습니다.