最初のCCFデータアルゴリズムコンペティション(ランキングトップ1、トップ2%、トップ8%)の経験と成果を覚えておいてください。CCFは来年再び会合します!

今年はmlとdlを学び始めました。dl、主にmlについてはあまり学びませんでした。夏休みに理論的な知識を学び始めました。学習の過程で、中国の比較的大規模なオープンソース組織であるDataWhale、Jiaquliがそれらから学ぶことを学びました。たくさんのことを知り、たくさんのビッグウィッグを知るようになり、徐々に競争を理解し始めました。0ベースのKaggleの紹介から、Tianchi、そしてその後のCCF競争まで、わずか数か月で、データサイエンスの競争についてある程度理解できたと思います。後続の大会と来年のCCF大会で最前列の賞を獲得することができます。このCCF大会は、合計6回の大会、5回の公式大会、1回のトレーニング大会に参加しました。

ここに写真の説明を挿入
ストラクチャードコンペティションは4つ、NLPコンペティションは2つありますが、実際に参加したのは3つだけで、時間がかかったものもあります。2つある場合はクリックして参加しましたが、言及はありませんでした。そしてその結果。

プロセス全体に参加したいくつかの大会を1つずつ紹介し、大会から学んだ知識のいくつかを要約しましょう。



1.屋内ユーザー移動時系列データの分類

質問アドレス:屋内ユーザーのスポーツ時系列データの分類。
この質問とチームメイトは協力して1位の結果を達成しました。このコンテストの前に、ベースラインを作成しました。
ここに写真の説明を挿入

1.データ紹介

上記の実際のニーズと深層学習の進歩に基づいて、このトレーニングコンテストは一般的な時系列分類アルゴリズムを構築することを目的としています。この質問を通じて正確な時系列分類モデルを確立し、誰もがより堅牢な時系列特徴表現方法を探求することを期待します。

実際、このコンテストの質問はかなり曖昧で、具体的な説明はありません。データについては、最初に全員が直接モデルにデータを投入し、結果を直接送信して良いスコアを取得します。

2.データの説明

ここに写真の説明を挿入

3.ゲームハーベスト

また、このような時系列の問題に遭遇したのは初めてです。最初はどのように始めればよいのかわかりませんでした。チームメートが乾物を共有して、機能の作成を開始し、作成した機能を元のデータに追加して、一緒にトレーニングしました。それは良い役割を果たしており、スコアの増加もかなり大きいです。

したがって、ゲームの際に機能が少ない場合は、特定のデータから新しい機能を掘り起こすことを学ぶ必要があります。

 #统计特征    
    max_X=data.x.max()
    min_X=data.x.min()
    range_X=max_X-min_X
    var_X=data.x.var()
    std_X=data.x.std()
    mean_X=data.x.mean()
    median_X=data.x.median()
    kurtosis_X=data.x.kurtosis()
    skewness_X =data.x.skew()
    Q25_X=data.x.quantile(q=0.25)
    Q75_X=data.x.quantile(q=0.75)
    #聚合特征
    
    #差分值
    max_diff1_x=data.x.diff(1).max()
    min_diff1_x=data.x.diff(1).min()
    range_diff1_x=max_diff1_x-min_diff1_x
    var_diff1_x=data.x.diff(1).var()
    std_diff1_x=data.x.diff(1).std()
    mean_diff1_x=data.x.diff(1).mean()
    median_diff1_x=data.x.diff(1).median()
    kurtosis_diff1_x=data.x.diff(1).kurtosis()
    skewness_diff1_x =data.x.diff(1).skew()
    Q25_diff1_X=data.x.diff(1).quantile(q=0.25)
    Q75_diff1_X=data.x.diff(1).quantile(q=0.75)

30を超える新機能が作成されました。

また、このゲームからスタッキングフュージョン方式と構造の新機能を学び、このフュージョン方式を使用すると、特にスコアアップが大きく、他のゲームはわかりませんが、少なくともこのゲームはこんな感じです!

2.企業による違法な資金調達のリスク予測

このゲームの公式データはかなりたくさんあります。複数のテーブルから便利な機能を抽出する方法がこのゲームの鍵です!以前ベースラインシェアを作成しましたが、これはShuiGeのベースラインに基づいて改善されましたA榜排名36,B榜79全体的に良いです。
リスト
Bリスト

1.データ紹介

データセットには約25,000社のデータが含まれており、そのうち約15,000社がデータをトレーニングセットとしてラベル付けし、残りのデータをテストセットとしてラベル付けしています。データは、基本的な企業情報、企業の年次報告書、企業の課税状況などで構成されています。データには、数値、文字、日付など、多くのデータタイプ(感度低下)が含まれています。一部の企業では一部のフィールドが欠落しています。最初の列はidです。これは、会社の一意のIDです。

2.データの説明

ここでは、最初のテーブルbase_info.csvを例として取り上げます。このテーブル
には、データセット7および8に関係するすべての企業の基本情報が含まれています。各行は企業の基本データを表し、各行には33列があります。id列は企業の一意のIDです。列は「、」区切り文字で区切られます。

データ形式は次のとおりです。
ここに写真の説明を挿入

#读取数据
base_info = pd.read_csv(PATH + 'base_info.csv')
#输出数据shape和不重复企业id数
print(base_info.shape, base_info['id'].nunique())
#读取数据
base_info.head(1)
#查看缺失值,这里借助了missingno这个包,import missingno as msno。
msno.bar(base_info)#查看缺失值

結果グラフ:
ここに写真の説明を挿入
このグラフは、どのデータに欠落値があるかを明確に示しています。横軸は特徴であり、縦軸は欠落していない値の数です。各列の白い領域は欠落値を表しています。

3.ゲームハーベスト

3.1機能の選択と構築

このコンペティションのデータでは、多くのテーブルに欠落値があります。欠落値の処理、機能の選択と構築、機能のクロスオーバー、ビニングなどについては、優れた機能が次のステップであるため、ある程度の理解が必要です。モデルトレーニングの基礎。機能の処理については、以前に書いた記事を参照してください。

#orgid	机构标识 oplocdistrict	行政区划代码	  jobid	职位标识	
base_info['district_FLAG1'] = (base_info['orgid'].fillna('').apply(lambda x: str(x)[:6]) == \
    base_info['oplocdistrict'].fillna('').apply(lambda x: str(x)[:6])).astype(int)
base_info['district_FLAG2'] = (base_info['orgid'].fillna('').apply(lambda x: str(x)[:6]) == \
    base_info['jobid'].fillna('').apply(lambda x: str(x)[:6])).astype(int)
base_info['district_FLAG3'] = (base_info['oplocdistrict'].fillna('').apply(lambda x: str(x)[:6]) == \
    base_info['jobid'].fillna('').apply(lambda x: str(x)[:6])).astype(int)

#parnum	合伙人数	exenum	执行人数  empnum	从业人数
base_info['person_SUM'] = base_info[['empnum', 'parnum', 'exenum']].sum(1)
base_info['person_NULL_SUM'] = base_info[['empnum', 'parnum', 'exenum']].isnull().astype(int).sum(1)

#regcap	注册资本(金) congro	投资总额
# base_info['regcap_DIVDE_empnum'] = base_info['regcap'] / base_info['empnum']
# base_info['regcap_DIVDE_exenum'] = base_info['regcap'] / base_info['exenum']

# base_info['reccap_DIVDE_empnum'] = base_info['reccap'] / base_info['empnum']
# base_info['regcap_DIVDE_exenum'] = base_info['regcap'] / base_info['exenum']

#base_info['congro_DIVDE_empnum'] = base_info['congro'] / base_info['empnum']
#base_info['regcap_DIVDE_exenum'] = base_info['regcap'] / base_info['exenum']

base_info['opfrom'] = pd.to_datetime(base_info['opfrom'])#opfrom	经营期限起	
base_info['opto'] = pd.to_datetime(base_info['opto'])#opto	经营期限止
base_info['opfrom_TONOW'] = (datetime.now() - base_info['opfrom']).dt.days
base_info['opfrom_TIME'] = (base_info['opto'] - base_info['opfrom']).dt.days

#opscope	经营范围	
base_info['opscope_COUNT'] = base_info['opscope'].apply(lambda x: len(x.replace("\t", ",").replace("\n", ",").split('、')))

#对类别特征做处理
cat_col = ['oplocdistrict', 'industryphy', 'industryco', 'enttype',
           'enttypeitem', 'enttypeminu', 'enttypegb',
          'dom', 'oploc', 'opform','townsign']
#如果类别特征出现的次数小于10转为-1
for col in cat_col:
    base_info[col + '_COUNT'] = base_info[col].map(base_info[col].value_counts())
    col_idx = base_info[col].value_counts()
    for idx in col_idx[col_idx < 10].index:
        base_info[col] = base_info[col].replace(idx, -1)        

# base_info['opscope'] = base_info['opscope'].apply(lambda x: x.replace("\t", " ").replace("\n", " ").replace(",", " "))
# clf_tfidf = TfidfVectorizer(max_features=200)
# tfidf=clf_tfidf.fit_transform(base_info['opscope'])
# tfidf = pd.DataFrame(tfidf.toarray())
# tfidf.columns = ['opscope_' + str(x) for x in range(200)]
# base_info = pd.concat([base_info, tfidf], axis=1)

base_info = base_info.drop(['opfrom', 'opto'], axis=1)#删除时间

for col in ['industryphy', 'dom', 'opform', 'oploc']:
    base_info[col] = pd.factorize(base_info[col])[0]

これらのフィールドの意味をコードに追加して、これらの意味を理解し、いくつかの処理を実行できるようにしました。これらの意味を追加することもできます。

3.2モデルの選択

モデルの選択に関しては、基本的に、XGboost、Lightgbm Catboostなど、統合学習用に人気のあるいくつかのモデルを選択します。

これらの単一モデルは多くの大会で良い結果をもたらします。これらのモデルの結果を組み合わせると、効果が向上する可能性があります。もちろん、一部の大会ではいくつかのモデルの効果に違いがある可能性があり、これらの統合学習モデルは欠落を自動的に修正できます。価値特性は自分で処理します!

ただし、これらの統合学習の理論的知識を学ぶことをお勧めします。これは、その後の研究や競争に大いに役立ちます。

3.データセキュリティガバナンスのためのデータコンテンツのインテリジェントな検出と分類

これはNLP関連のコンテストです。正直なところ、NLP関連の理論についてはあまり読んでいないので、このコンテストは個人学習の入門コンテストと見なすことができます。私は深い学習方法ではなく、従来の機械を使用しました。行うことを学ぶために、実験室には深い学習を行うための条件がなく、深い学習のこのモデルの単純な理解しかありません。
ここに写真の説明を挿入

1.データ紹介

(1)注釈付きデータ:合計7000のドキュメント、カテゴリには、金融、不動産、家具、教育、技術、ファッション、および現在の業務の7つのカテゴリが含まれます。各カテゴリには1000のドキュメントが含まれます。
(2)ラベルなしデータ:合計33,000ドキュメント。
(3)分類および分類テストデータ:金融、不動産、家具、教育、技術、ファッション、時事、ゲーム、エンターテインメント、スポーツの10のカテゴリを含む合計20,000のドキュメント。

2.データの説明

この競争は一般的に分類作業ですが、1つの難しさは、職員がトレーニングセットの7つのカテゴリしか与えなかったということですが、10のカテゴリを予測する必要があるため、他の3つのカテゴリは自分で与える必要があります。彼らは一緒にタグを付けて訓練します!
ここに写真の説明を挿入

3.ゲームハーベスト

NLPの知識に初めて触れたとき、私は本当に少し白人で、理論的な知識をあまり理解していなかったので、このゲームは機会主義の方法でもあり、テキストタイプのデータのいくつかの新しい概念も学びました。

アイデア1:TF-IDF +機械学習分類器
は、TF-IDFを直接使用してテキストから特徴を抽出し、分類器を使用して分類し、選択した分類器はSVM、LR、XGboostなどを使用できます。

アイデア2:FastText
FastTextは、エントリーレベルの単語ベクトルです。Facebookが提供するFastTextツールを使用すると、分類子をすばやく作成できます。

アイデア3:WordVec +深層学習分類器
WordVecは高度な単語ベクトルであり、深層学習分類を構築することで分類が完了します。深層学習分類のネットワーク構造では、TextCNN、TextRnn、またはBiLSTMを選択できます。

アイデア4:バートワードベクトル
バートは、強力なモデリングおよび学習機能を備えた、高度に一致したワードベクトルです。

4、まとめ

このようなデータサイエンスコンペティションに初めて参加して、たくさんのことを学びました。コンペティションで早く成長し、他の学生とコミュニケーションを取り、多くの新しい知識を学ぶことができます。一部のコンテンツは理論的にしか見られなかったかもしれませんが、そうではありません。まだやっていないのですが、この大会を通して、理論的には見えないスキルや方法を学ぶことができます。最初のCCF大会は無事終了しました。他の大会に移ります。来年のCCF大会に戻ります!

録音時間:2020年12月7日

おすすめ

転載: blog.csdn.net/weixin_42305672/article/details/110791479