本書の最後の部分では、シリーズの最初の記事「マルチファクター戦略で強力な暗号資産ポートフォリオを構築する」-理論的基礎-、これは2番目の記事-データの前処理です。
データは、因子データの計算の前/後、および単一因子の有効性が検定される前に処理する必要があります。 特定のデータの前処理には、重複値、外れ値/欠損値/極値、正規化、およびデータ頻度の処理が含まれます。
重複値の診断は、データがどのように「あるべきか」を理解することから始まります。 通常、データは次の形式になります。
原則:データのインデックス(キー)を決定したら、どのレベルでデータに重複する値がないかを知ることができます。
Pd。DataFrame.duplicated(subset=[キー 1, キー 2, …])
pd.merge(df 1、df 2、on = [キー1、キー2、…]、指標= True、validate = ‘1:1’)
※水平マージの関数で、指標パラメータを追加すると、_mergeフィールドが生成され、dfm[‘_merge’].value_counts()を使用して、マージ後のさまざまなソースからのサンプル数を確認できます
1.極端なケース。 **例えば、トークン価格が0.000001$のトークンや、市場価値が50万ドルしかないトークンは、少しでも変わると何十倍もの還元率になります。 2. データの特性。 **例えば、2020年1月1日からトークン価格データがダウンロードされた場合、前日の終値がないため、2020年1月1日のリターンデータは計算できません。 3.データエラー。 **データプロバイダーは、トークンあたり12ドルをトークンあたり1.2ドルとして記録するなど、必然的に間違いを犯します。
*削除。 合理的に修正または修正できない外れ値は、削除の対象と見なすことができます。 *交換。 これは、ウィンゾライジングや対数(一般的には使用されません)などの極値を処理するためによく使用されます。 *心地。 欠損値については、妥当な方法で埋めることも検討できます、一般的な方法には、平均(または移動平均)、補間、0 df.fillna(0)、前方df.fillna(‘ffill’)/後方df.fillna(‘bfill’)などがあり、パディングが依存する仮定が正しいかどうかを検討します。
機械学習は、バックフィルや先読みバイアスのリスクに注意して使用する必要があります
1.パーセンタイル法。
最小から最大の順に並べることで、最小比率と最大比率を超えるデータを重要なデータに置き換えます。 履歴データが豊富なデータの場合、この方法は比較的大雑把で適用できず、一定の割合のデータを強制的に削除すると、一定の割合の損失が発生する場合があります。
2.3σ/三重標準偏差法
データ範囲のすべての因子に対して、次の調整を行います。
この方法のデメリットは、株価やトークン価格など、定量的な分野で一般的に使用されるデータは、正規分布の仮定に合致しないスパイクや太いテール分布を示すことが多く、この場合、3 σ法を用いることで大量のデータが外れ値として誤って識別されてしまうことです。
3.绝对值差中位数法(Median Absolute Deviation, MAD)
この方法は中央値と絶対値のバイアスに基づいているため、処理されたデータは極端または外れ値の影響を受けにくくなります。 平均と標準偏差に基づく方法よりも頑健です。
class Extreme(object): デフ__init__(s、this_data): s.ini_data = this_data
デフ3_sigma(s、n = 3): .ini_data.mea()の平均= 標準= s.ini_data.std() 低い = 平均 - n*標準 高値 = 平均値 + n*標準偏差
np.clip(s.ini_data、low、high)を返します
デフMAD(s、n = 3): 中央値 = s.ini_data.median() mad_median = abs(s.ini_data - 中央値).median() 高 = 中央値 + n * mad_median 低 = 中央値 - n * mad_median
Def 分位数(s, L = 0.025, H = 0.975): 低い = s.ini_data.quantile(l) high = s.ini_data.quantile(h) np.clip(s.ini_data、low、high)を返します
各因子を(0, 1)区間のデータに変換すると、異なるサイズまたは範囲のデータの比較が可能になりますが、データ内の分布は変更されず、合計は1になりません。
*最大最小値を考慮するため外れ値に敏感 *異なるディメンションからのデータの比較を助長する統合ディメンション。
3.排序百分位(Rank Scaling)
データ特徴をランキングに変換し、それらのランキングを 0 から 1 までのスコア (通常はデータセット内のパーセンタイル) に変換します。 *
ランキングは外れ値の影響を受けないため、この方法は外れ値の影響を受けません。 ** ※データ内のポイント間の絶対距離を維持する代わりに、相対ランキングに変換します。
デフ__init__(s、this_data、日付): s.ini_data = this_data s.date = 日付 デフzscore(秒): .ini_data.mea()の平均= 標準= s.ini_data.std() s.ini_data.sub(mean).div(std)を返します。 def maxmin(s): min = s.ini_data.min() 最大= s.ini_data.max() s.ini_data.sub(min).div(max - min)を返します。 デフnormRank(秒): #指定された列をランク付けする、method='min’は、同じ値が平均ランクではなく、同じランクを持つことを意味します ランク= s.ini_data.rank(method=‘min’) ランク.div(ランク.max())を返します
取得されたデータは、分析に必要な頻度ほど頻繁ではない場合があります。 たとえば、分析レベルが月次で、生データの頻度が日次の場合、「ダウンサンプリング」、つまり集計データが月次である必要があります。
これは、日次データを月次データに集約するなど、コレクション内のデータをデータ行に集約することを指します。 この場合、各集計指標の特性を考慮する必要があり、通常の操作は次のとおりです。
*最初の値/最後の値 *平均/中央値 *標準偏差
これは、月次分析用の年次データなど、データの行を複数のデータ行に分割することを指します。 これは通常、単純な繰り返しであり、毎月比例して年間データを集計する必要がある場合があります。
元の記事へのリンク
44.9K 人気度
5.06K 人気度
3.53K 人気度
1.43K 人気度
1.39K 人気度
LUCIDA:多要素戦略で堅牢な暗号資産ポートフォリオを構築する方法(データ前処理)
前言
本書の最後の部分では、シリーズの最初の記事「マルチファクター戦略で強力な暗号資産ポートフォリオを構築する」-理論的基礎-、これは2番目の記事-データの前処理です。
データは、因子データの計算の前/後、および単一因子の有効性が検定される前に処理する必要があります。 特定のデータの前処理には、重複値、外れ値/欠損値/極値、正規化、およびデータ頻度の処理が含まれます。
I. 重複する値
データ関連の定義:
重複値の診断は、データがどのように「あるべきか」を理解することから始まります。 通常、データは次の形式になります。
原則:データのインデックス(キー)を決定したら、どのレベルでデータに重複する値がないかを知ることができます。
チェック方法:
Pd。DataFrame.duplicated(subset=[キー 1, キー 2, …])
pd.merge(df 1、df 2、on = [キー1、キー2、…]、指標= True、validate = ‘1:1’)
※水平マージの関数で、指標パラメータを追加すると、_mergeフィールドが生成され、dfm[‘_merge’].value_counts()を使用して、マージ後のさまざまなソースからのサンプル数を確認できます
2. 外れ値/欠損値/極値
外れ値の一般的な原因:
1.極端なケース。 **例えば、トークン価格が0.000001$のトークンや、市場価値が50万ドルしかないトークンは、少しでも変わると何十倍もの還元率になります。 2. データの特性。 **例えば、2020年1月1日からトークン価格データがダウンロードされた場合、前日の終値がないため、2020年1月1日のリターンデータは計算できません。 3.データエラー。 **データプロバイダーは、トークンあたり12ドルをトークンあたり1.2ドルとして記録するなど、必然的に間違いを犯します。
外れ値と欠損値を処理するための原則:
*削除。 合理的に修正または修正できない外れ値は、削除の対象と見なすことができます。 *交換。 これは、ウィンゾライジングや対数(一般的には使用されません)などの極値を処理するためによく使用されます。 *心地。 欠損値については、妥当な方法で埋めることも検討できます、一般的な方法には、平均(または移動平均)、補間、0 df.fillna(0)、前方df.fillna(‘ffill’)/後方df.fillna(‘bfill’)などがあり、パディングが依存する仮定が正しいかどうかを検討します。
機械学習は、バックフィルや先読みバイアスのリスクに注意して使用する必要があります
極値の扱い:
1.パーセンタイル法。
最小から最大の順に並べることで、最小比率と最大比率を超えるデータを重要なデータに置き換えます。 履歴データが豊富なデータの場合、この方法は比較的大雑把で適用できず、一定の割合のデータを強制的に削除すると、一定の割合の損失が発生する場合があります。
2.3σ/三重標準偏差法
データ範囲のすべての因子に対して、次の調整を行います。
この方法のデメリットは、株価やトークン価格など、定量的な分野で一般的に使用されるデータは、正規分布の仮定に合致しないスパイクや太いテール分布を示すことが多く、この場合、3 σ法を用いることで大量のデータが外れ値として誤って識別されてしまうことです。
3.绝对值差中位数法(Median Absolute Deviation, MAD)
この方法は中央値と絶対値のバイアスに基づいているため、処理されたデータは極端または外れ値の影響を受けにくくなります。 平均と標準偏差に基づく方法よりも頑健です。
因子データの極値の場合の扱い
class Extreme(object): デフ__init__(s、this_data): s.ini_data = this_data
デフ3_sigma(s、n = 3): .ini_data.mea()の平均= 標準= s.ini_data.std() 低い = 平均 - n*標準 高値 = 平均値 + n*標準偏差
np.clip(s.ini_data、low、high)を返します
デフMAD(s、n = 3): 中央値 = s.ini_data.median() mad_median = abs(s.ini_data - 中央値).median() 高 = 中央値 + n * mad_median 低 = 中央値 - n * mad_median
np.clip(s.ini_data、low、high)を返します
Def 分位数(s, L = 0.025, H = 0.975): 低い = s.ini_data.quantile(l) high = s.ini_data.quantile(h) np.clip(s.ini_data、low、high)を返します
3. 標準化
各因子を(0, 1)区間のデータに変換すると、異なるサイズまたは範囲のデータの比較が可能になりますが、データ内の分布は変更されず、合計は1になりません。
*最大最小値を考慮するため外れ値に敏感 *異なるディメンションからのデータの比較を助長する統合ディメンション。
3.排序百分位(Rank Scaling)
データ特徴をランキングに変換し、それらのランキングを 0 から 1 までのスコア (通常はデータセット内のパーセンタイル) に変換します。 *
ランキングは外れ値の影響を受けないため、この方法は外れ値の影響を受けません。 ** ※データ内のポイント間の絶対距離を維持する代わりに、相対ランキングに変換します。
正規化係数 データクラス Scale(object):
デフ__init__(s、this_data、日付): s.ini_data = this_data s.date = 日付 デフzscore(秒): .ini_data.mea()の平均= 標準= s.ini_data.std() s.ini_data.sub(mean).div(std)を返します。 def maxmin(s): min = s.ini_data.min() 最大= s.ini_data.max() s.ini_data.sub(min).div(max - min)を返します。 デフnormRank(秒): #指定された列をランク付けする、method='min’は、同じ値が平均ランクではなく、同じランクを持つことを意味します
ランク= s.ini_data.rank(method=‘min’) ランク.div(ランク.max())を返します
第四に、データ周波数
取得されたデータは、分析に必要な頻度ほど頻繁ではない場合があります。 たとえば、分析レベルが月次で、生データの頻度が日次の場合、「ダウンサンプリング」、つまり集計データが月次である必要があります。
ダウンサンプリング
これは、日次データを月次データに集約するなど、コレクション内のデータをデータ行に集約することを指します。 この場合、各集計指標の特性を考慮する必要があり、通常の操作は次のとおりです。
*最初の値/最後の値 *平均/中央値 *標準偏差
アップサンプリング
これは、月次分析用の年次データなど、データの行を複数のデータ行に分割することを指します。 これは通常、単純な繰り返しであり、毎月比例して年間データを集計する必要がある場合があります。
元の記事へのリンク