Skip to content

利用Spark分析存储在Hdfs的ES日志,根据用户最近10天的访问特点给用户的活跃程度打分,分数范围0-100

Notifications You must be signed in to change notification settings

adairxie/UserActivity

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

分析用户活跃程度需要统计的数据

  • 用户总的在线时长

    • 指标名称
      • online_time_total
    • 指标含义
      • 单个用户访问的总时长,以小时或者天作为单位。
    • 计算公式
        online_time_total = online_time_total + session_time
  • 用户最近一周的在线时长

    • 指标名称
      • week_online_time_total
    • 指标含义
      • 单个用户的最近一周的会话总时长,用来统计最近一周的活跃度,以小时为单位。
    • 计算公式
        week_online_time_total = week_online_time_total + session_time
  • 用户最近一周的在线天数

    • 指标名称
      • week_online_days
    • 指标含义
      • 用户最近一周的在线天数,在线天数越多,显示用户越活跃。
    • 计算公式
        week_online_days = week_online_days + 1
  • 最近一周的日均在线时长

    • 指标名称
      • day_avg_online_time
    • 指标含义
      • 用户近一周平均每天的在线时长,平均值越大,说明该用户是资深用户。
    • 计算公式
        day_avg_online_time = week_online_time_total / 7
  • 用户最近一周的访问次数

    • 指标名称
      • week_access_count
    • 指标含义
      • 用户近一周的访问次数。访问次数越多,表示用户更活跃。
    • 计算公式
        if bytes_sent > 0 then
            week_access_count = week_access_count + 1
        end
  • 用户最近一周的日均有效访问次数

    • 指标名称
      • day_avg_access_count
    • 指标含义
      • 单个用户近期的、平均每天的有效访问次数,该值越大,表名用户越活跃。
    • 计算公式
        day_avg_access_count = week_access_count_total / 7
  • 同一accessKey下,不同设备指纹使用的回源端口个数

    • 指标名称
      • target_port_num
    • 指标含义
      • 在游戏大厅中,有很多游戏,其使用的tcp端口不同,如果同一fingerprint所使用的端口号较少, 则表示用户不够活跃
    • 计算公式
        target_port_num =ES中查找出fingerprint使用的同一accessKey下的端口个数

用户活跃程度评价方法

  • 用户活跃程度评价的各权重因子,权重由高至低暂定为以下顺序:

    • 最近一周的日均在线时长, 权重为 2
        weight_day_avg_online_time = 2
    • 最近一周的在线时长, 权重为 3
        weight_week_online_time_total = 2
    • 用户最近一周的在线天数, 权重为 2
        weight_week_online_days = 2
    • 用户总的在线时长, 权重为 10
        weight_online_time_total = 10
    • 最近一周的日均访问次数, 权重为 1
        weight_day_avg_access_count = 1
    • 最近一周的有效访问次数, 权重为 1
    weight_week_access_count = 1
    • 回源端口个数(游戏大厅),权重为1
        weight_target_port_num = 1
  • 用户活跃度评价算法

    • 每个权重因子的满分100分,每一个项目得分情况按如下方法统计

      • 最近一周的日均在线时长
          day_avg_online_time_ratio = day_avg_online_time / DAY_AVG_ONLINE_TIME (DAY_AVG_ONLINE_TIME4小时)   
          if day_avg_online_time_ratio > 1 then   
              day_avg_online_time_ratio = 1   
          end
          score_day_avg_online_time = day_avg_online_time_ratio * 100    
      • 最近一周的在线时长
          WEEK_ONLINE_TIME = DAY_AVG_ONLINE_TIME * 7
          week_online_time_total_ratio = week_online_time_total / WEEK_ONLINE_TIME   
          if week_online_time_total_ratio > 1 then
              week_online_time_total_ratio = 1
          end
          score_week_online_time_total = week_online_time_total_ratio * 100
      • 最近一周的在线天数
          score_week_online_days = week_online_days / 7 * 100
      • 用户总的在线时长
          ONLINE_TIME_TOTAL = DAY_AVG_ONLINE_TIME * (从起始记录当前日志到现在经过的天数)
          online_time_total_ratio = online_time_total / ONLINE_TIME_TOTAL
          if online_time_total_ratio > 1 then   
              online_time_total_ratio = 1   
          end
          score_online_time_total = online_time_total_ratio * 100
      • 用户最近一周的日均有效访问次数
          DAY_ACCESS_COUNT = 100
          day_avg_access_count_ratio = day_avg_access_count / DAY_ACCESS_COUNT   
          if day_avg_access_count_ratio > 1 then
              day_avg_access_count_ratio = 1
          end
          score_day_avg_access_count = day_avg_access_count_ratio * 100   

      如果日均有效访问次数大于等于100次(es大数据统计出这个阈值),则得分为100分

      • 用户最近一周的有效访问次数
          WEEK_ACCESS_COUNT = 1000
          week_access_count_ratio = week_access_count / WEEK_ACCESS_COUNT
          if week_access_count_ratio > 1 then
              week_access_count_ratio = 1
          end
          score_week_access_count = week_access_count_ratio * 100   

      如果最近一周的有效访问次数大于等于1000次(es大数据统计出这个阈值), 则得分为100分

      • 回源端口个数
          TARGET_PORT_NUM = 4
          target_port_num_ratio = target_port_num / TARGET_PORT_NUM   
          if target_port_num_ratio > 1 then
              target_port_num_ratio = 1
          end
          score_target_port_num = target_port_num_ratio * 100   
    • 用户得分score

          score = score_day_avg_online_time * weight_day_avg_online_time +  
                  score_week_online_time_total * weight_week_online_time_total +   
                  score_week_online_days * weight_week_online_days +  
                  score_online_time_total * weight_online_time_total +  
                  score_day_avg_access_count * weight_day_avg_access_count +
                  score_week_access_count * weight_week_access_count +
                  score_target_port_num * weight_target_port_num   
  • 系统dependencies

    • java >= 1.8.0

    • python >= 2.7

    • spark-2.3.1, 线上spark集群的spark版本为1.6.2, 两者不兼容

    • pip install redis

    • pip install pathlib

    • pip install elasticsearch

    • pip install findspark

    • pip install config

  • 系统流程图

Alt-Text

About

利用Spark分析存储在Hdfs的ES日志,根据用户最近10天的访问特点给用户的活跃程度打分,分数范围0-100

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages