ad_feature_data_sample.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import os
  2. import pandas as pd
  3. import random
  4. import datetime
  5. import time
  6. def neg_under_sample(data_dir, sample_data_dir, dt):
  7. # 欠采样,对负样本按照30%的概率进行舍弃,pos:neg ≈ 1:10
  8. data_df = pd.read_csv(f"{data_dir}/{dt}.csv")
  9. neg_df = data_df[data_df['share_status'] == 0].copy()
  10. neg_df['rand'] = [random.uniform(0, 1) for i in range(neg_df.shape[0])]
  11. sample_neg_df = neg_df[neg_df['rand'] > 0.3]
  12. sample_neg_df = sample_neg_df.drop(columns=['rand'])
  13. pos_df = data_df[data_df['share_status'] == 1].copy()
  14. sample_df = pd.concat([pos_df, sample_neg_df])
  15. sample_df = sample_df.sample(frac=1.0).reset_index(drop=True)
  16. # 写入csv
  17. if not os.path.exists(sample_data_dir):
  18. os.makedirs(sample_data_dir)
  19. sample_df.to_csv(f"{sample_data_dir}/{dt}.csv", index=False)
  20. print(f"pos num: {pos_df.shape[0]}")
  21. print(f"neg num: {neg_df.shape[0]}")
  22. print(f"neg_sample num: {sample_neg_df.shape[0]}")
  23. print(f"initial data num: {data_df.shape[0]}")
  24. print(f"sample data num: {sample_df.shape[0]}")
  25. if __name__ == '__main__':
  26. st_time = time.time()
  27. data_dir = './data/train_data'
  28. sample_data_dir = './data/sample_train_data'
  29. now_date = datetime.datetime.today()
  30. dt = datetime.datetime.strftime(now_date - datetime.timedelta(days=1), '%Y%m%d')
  31. neg_under_sample(data_dir=data_dir, sample_data_dir=sample_data_dir, dt=dt)