??7月30日是联合国打击贩卖人口世界日,这一天的重点是结束利用儿童、妇女和男子从事强迫劳动或性工作的犯罪行为。全世界有2700万至4580万人陷于某种形式的现代奴役之中。受害者被迫成为性工作者、乞丐和儿童兵,或成为家庭佣工、工厂工人和制造业、建筑业、采矿业、商业捕鱼业和其他行业的劳工。世界上每个国家都有人口贩运,包括美国。人口贩运是一个利润丰厚的行业,每年产生的非法利润估计为1500亿美元。事实上,它是全球有组织犯罪的最大利润来源之一,仅次于非法药物。
??世界上几乎每个国家都受到人口贩运的影响,因为人口贩运是一个起点、过境点或目的地,据报告,137个国家至少有127个国家的受害者受到剥削。人口贩运是欧洲最有利可图的非法商业之一,犯罪集团每年从中获利约30亿美元,使其成为一个相当大的犯罪商业,掠夺世界上最边缘化的人。在欧洲,超过14万名受害者因性剥削而陷入暴力和堕落的境地,该区域多达七分之一的性工作者可能因贩运而沦为卖淫奴隶。在全球范围内,五分之一的人口贩运受害者是儿童,尽管在非洲和大湄公河等较贫穷区域和次区域,儿童占被贩运人口的大多数。与此同时,妇女占世界人口贩运受害者的三分之二。
??本质上,人口贩运是一个供应链。”捐助者(vic tims)通过贩运网络满足需求(廉价和脆弱的非法劳工)。贩运者留下了一条数据踪迹,尽管他们努力在网格外和暗处进行操作,但这条踪迹无论多么模糊。分析是对数据进行数学搜索,有助于执法部门打击人口贩运。假设毒品和犯罪问题办公室雇用了你的ICM小组,通过建立数学模型来打击人口贩运。
??您的ICM团队的任务是:
??1、发现有风险的人员。
??贩运往往以虚假的招聘方式开始,如承诺就业或恋爱。数据可以帮助确定具体的经济萧条地区,在这些地区,我们可以确定风险最大的人群,并针对这些人群开展预防活动。被卷入人口贩运的风险因素包括贫困、失业、移民和政治冲突或战争的影响。
??2.被害人之识别与定位。
??贩运网络是动态的。贩运者可能频繁地改变分销和运输路线以避免被发现,使执法人员和分析人员在试图识别和拆除贩运网络时掌握不完整的信息。然而,研究人员可以通过追踪不同地点数据的微妙趋势来提供帮助;在我们实际接触受害者的入口,比如急诊室;在地方执法活动中。例如,在性交易中,可以通过查看零售店购物的交易数据来找到线索。受害者有时偷取贩运者可能无法提供的基本用品,如女性卫生用品、肥皂和牙膏。我们可以找到一些小偷小摸的线索。通常通过借记卡或信用卡进行的酒店预订交易中使用现金的趋势也可能引起危险。
??尤其是性贩运活动,在互联网的公共区域留下痕迹,主要是以广告和护送广告的形式。广告商倾向于使用社交网络和约会网站,而较熟练的贩运者则经常改变其在线存在,以逃避识别。通过数据挖掘,研究人员可以根据用户行为在不同的社交网络上定位用户,即使他们的用户名和信息不一样。在网络信息之间建立链接可以帮助我们锁定贩运者的位置。众所周知,贩运者还利用包括公约和大型体育赛事在内的重大活动中对商业性剥削的需求增加。对在线广告的位置和时间进行分析,有助于执法部门发现并可能阻止将受害者运送到活动现场。
??3、网络中断。
??中断人口、资金和贩运活动的其他组成部分的流动,对于查明贩运网络、从源头上破坏其基础设施并加以消除至关重要。不幸的是,网络中断需要当局和网络周围的公众的合作。在尼泊尔和哥斯达黎加等一些国家,官员受到威胁或贿赂,无视或以其他方式允许贩运人口。对已知使用被贩运劳工的行业的监管往往不够。贩运者可以很容易地伪造或修改受害者的身份证件,使负担过重的当局看不见这些证件。
??为了帮助当局确定贩运活动的目标,研究人员可以求助于网络分析,这是一种表示现实世界系统及其相互作用的数学方法。例如,网络分析可用于绘制嵌入社交网络(如Facebook和Twitter)中的用户动态及其连接。这可能会识别出一个可疑的人,或者是贩运者或顾客。社交网络分析也有助于确定哪些联系人对他人有重要影响。这可能有助于及早查明被害人或贩运交易。
??贩卖人口问题影响到全世界。本文通过数学建模,解决了人口贩运的预防和打击问题。
??首先,选取GDP、失业率、净移民率、和平指数、犯罪率、年均自然灾害次数等6个因素,客观评价一个国家或地区的总体发展水平。由于指标过多,为了避免信息的重叠,采用主成分分析法得到了2个主成分,分别代表社会因素和环境因素。这两个因素得分越高,该地区的人口被贩运的危险性就越大。最后,我们知道,地中海沿岸、南部非洲、东欧、东南亚和拉丁美洲的国家是最危险的人口。
??然后,采用动态和静态两种身份识别方法,找出被害人的身份和位置。我们将贩运者的贩运路线抽象为一个网络模型进行动态分析。在每一条直线上增加权重,考虑大型体育赛事等外生事件,建立最优目标函数。当特定的外生事件发生时,我们计算该国对其他国家的吸引力。因此,我们可以根据节点之间的参数对网络进行建模。这将导致受害者最可能的路线和位置。然后,将被害人自身的静态身份划分为三个层次,根据划分规则对时空信息进行分割。分析了被害人所在区域处于某一路径的过程和终点。它缩小了受害者监视的范围。在小概率事件中挖掘出被害人的相关信息指标,找出被害人的身份和位置。
??最后,主要通过网络分析和数据挖掘,提取关注社会网站上人口贩运信息的用户的信息。然后对用户信息数据进行规范化处理,生成用户数据库。通过关联规则和相似度来识别联系人和对他人的影响。根据任务2中发现的区域,我们有IP数据域,并将其与社交网站中的IP数据域进行比较。很容易找到目标并摧毁贩运网络。
??通过以上分析,我们对人口贩运问题提出了相关的政策建议和解决方案。
??为了更好地构建模型,我们做了以下假设作为构建模型的开始。
??◆个别国家或地区不会在短期内制定和颁布特殊对待贩运人口的政策。政策的突然出台将导致各地区指标的波动。
??◆每个国家或地区的经济状况和社会状况在短期内不会改变。经济状况和社会状况与贩运情况密切相关。短期内经济形势和社会形势的剧烈变化会导致模型误差。
??◆贩运者在运输过程中不会遇到极端天气条件。
??极端天气可能导致贩运者改变路线,并在确定被害人的位置时造成错误。
??◆社交网站上的网络数据集真实可靠。可靠的数据可以使模型更加有效,能够真实反映用户之间的关系,更有利于犯罪嫌疑人的识别。
??任务1分析
??贩运人口的危险因素包括贫穷、工业、移徙和免于政治冲突或战争。为了客观地评价一个国家或地区的总体发展水平,我们选取了GDP、失业率、净移民率、和平指数、犯罪率、年度自然灾害频度等6个因子。在经济萧条、社会动荡和环境恶劣的地区,人们往往有被贩运的危险。通过分析每个国家或地区的社会和环境因素,有可能查明这些国家或地区的贩运风险。
??任务2分析
??在贩运活动受害者、贩运成本低和贩运成本低的国家,贩运者往往更具选择性。但是,如果有一个外生事件,例如一个国家主办一个大型体育赛事,该国对受害者的需求将急剧增加。因此,我们可以根据这些因素将它们集成到一个动态网络中。通过对网络的分析确定了贩运者的贩运路线。受害者自身的行为与时间密切相关。需要从两个角度分析时间与空间的相关性,进而分析被害人的相关信息指标,识别被害人的身份和位置。
??任务3分析
??由于当局与公众之间的合作令人不满意,因此迫切需要新的方法来摧毁贩运网络。通过网络分析和数据挖掘,我们从关注人口贩运信息的社交网站中提取用户信息,并确定哪些联系人对其他人有重大影响。通过根据任务2中找到的区域识别IP数据域,我们可以通过比较社交网站中的IP数据域来识别目标用户并摧毁网络。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
/**
*
* @Description: FPTree dig victims info
* @Author long
* @Date 12,2 2017
*/
public class FPTree {
private int minSuport;
private double confident;
private int totalSize;
private Map<List<String>, Integer> frequentMap = new HashMap<List<String>,
Integer>();
private Set<String> decideAttr = null;
public int getMinSuport() {
return this.minSuport;
}
public void setMinSuport(int minSuport) {
this.minSuport = minSuport;
}
public double getConfident() {
return confident;
}
public void setConfident(double confident) {
this.confident = confident;
}
public void setDecideAttr(Set<String> decideAttr) {
this.decideAttr = decideAttr;
}
public Map<List<String>, Integer> getFrequentItems() {
return frequentMap;
}
public int getTotalSize() {
return totalSize;
}
private List<StrongAssociationRule> getRules(List<String> list) {
List<StrongAssociationRule> rect = new
LinkedList<StrongAssociationRule>();
if (list.size() > 1) {
for (int i = 0; i < list.size(); i++) {
String result = list.get(i);
if (decideAttr.contains(result)) {
List<String> condition = new ArrayList<String>();
condition.addAll(list.subList(0, i));
condition.addAll(list.subList(i + 1, list.size()));
StrongAssociationRule rule = new StrongAssociationRule();
rule.condition = condition;
rule.result = result;
rect.add(rule);
}
}
}
return rect;
}
public List<List<String>> readTransRocords(String[] filenames) {
Set<String> set = new HashSet<String>();
List<List<String>> transaction = null;
if (filenames.length > 0) {
transaction = new LinkedList<List<String>>();
for (String filename : filenames) {
try {
FileReader fr = new FileReader(filename);
BufferedReader br = new BufferedReader(fr);
try {
String line = null;
while ((line = br.readLine()) != null) {
if (line.trim().length() > 0) {
String[] str = line.split(",");
Set<String> record = new HashSet<String>();
for (String w : str) {
record.add(w);
set.add(w);
}
List<String> rl = new ArrayList<String>();
rl.addAll(record);
transaction.add(rl);
}
}
} finally {
br.close();
}
} catch (IOException ex) {
System.out.println("Read transaction records failed." +
ex.getMessage());
System.exit(1);
}
}
}
this.setDecideAttr(set);
return transaction;
}
private void combine(LinkedList<TreeNode> residualPath,
List<List<TreeNode>> results) {
if (residualPath.size() > 0) {
TreeNode head = residualPath.poll();
List<List<TreeNode>> newResults = new
ArrayList<List<TreeNode>>();
for (List<TreeNode> list : results) {
List<TreeNode> listCopy = new ArrayList<TreeNode>(list);
newResults.add(listCopy);
}
for (List<TreeNode> newPath : newResults) {
newPath.add(head);
}
results.addAll(newResults);
List<TreeNode> list = new ArrayList<TreeNode>();
list.add(head);
results.add(list);
combine(residualPath, results);
}
}
private boolean isSingleBranch(TreeNode root) {
boolean rect = true;
while (root.getChildren() != null) {
if (root.getChildren().size() > 1) {
rect = false;
break;
}
root = root.getChildren().get(0);
}
return rect;
}
private Map<String, Integer> getFrequency(List<List<String>> transRecords) {
Map<String, Integer> rect = new HashMap<String, Integer>();
for (List<String> record : transRecords) {
for (String item : record) {
Integer cnt = rect.get(item);
if (cnt == null) {
cnt = new Integer(0);
}
rect.put(item, ++cnt);
}
}
return rect;
}
public void buildFPTree(List<List<String>> transRecords) {
totalSize = transRecords.size();
final Map<String, Integer> freqMap = getFrequency(transRecords);
for (List<String> transRecord : transRecords) {
Collections.sort(transRecord, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return freqMap.get(o2) - freqMap.get(o1);
}
});
}
FPGrowth(transRecords, null);
}
private TreeNode buildSubTree(List<List<String>> transRecords,
final Map<String, Integer> freqMap,
final Map<String, TreeNode> headers) {
TreeNode root = new TreeNode();
for (List<String> transRecord : transRecords) {
LinkedList<String> record = new LinkedList<String>(transRecord);
TreeNode subTreeRoot = root;
TreeNode tmpRoot = null;
if (root.getChildren() != null) {
while (!record.isEmpty()
&& (tmpRoot =
subTreeRoot.findChild(record.peek())) != null) {
tmpRoot.countIncrement(1);
subTreeRoot = tmpRoot;
record.poll();
}
}
addNodes(subTreeRoot, record, headers);
}
return root;
}
}