数据专栏

智能大数据搬运工,你想要的我们都有

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

几乎每个软件都有自己的快捷键(又叫快速键或热键)。使用快捷键有时候为了方便、减少鼠标点击,有时候可以加快操作速度。国外有个 有趣的网站 ,专门收集各类通用软件的快捷键,由于 SAS 不够大众,没有收录SAS的快捷键。当然SAS也有许多自己的快捷键。其中我最常用的键有F3(运行代码)、F6(查看log信息)、Ctrl + / (注释代码)、Ctrl + Shift + / (取消代码注释)等等,用的不是非常多,多了记不住,但是少了又觉得缺少些什么。当然不同的人有不同的使用习惯,想必大家都有自己偏好的快捷键,这里就列出SAS9.2全部的快捷键,一共有4类,大家可以根据自己的需要来查找合适自己的快捷键。
查找的时候需要说明的有许多都是和微软系统通用的快捷方式,因此很多微软系统中熟悉的快捷键可以试试。下面红色加粗部分的快捷键,是我或SAS公司认为最有用的快捷键。大家可以选择性的看看。
SAS系统一共下面有4类快捷键,其中部分有重复, 第一类可自定义。
一,微软系统下默认的设定
Default Key Definitions under Windows
这个可以点F9快捷键或者命令框敲keys都可以跳出这个快捷键窗口。作用部分为空的是未定义,可以自己定义这些空白的作用。
快捷键 作用 快捷键 作用
F1 Help 跳出帮助文件 Alt + F1
F2 reshow Alt + F2
F3 End 运行代码 Alt + F3
F4 Recall 调回提交的代码,非增强型编辑器有效。 Alt + F11
F5 Wpgm Alt + F12
F6 Log 日志窗口 Ctrl + B libref 显示数据逻辑库的目录
F7 Output 结果窗口 Ctrl + D Dir 显示数据逻辑库的目录
F8 zoom off; submit Ctrl + E Clear 清除当前窗口如output,log
F9 keys 默认快捷键 Ctrl + G
F11 command focus Ctrl + H Help 帮助
F12 Ctrl + I Options SAS系统选项设置
Shift + F1 Subtop Ctrl + J
Shift + F2 Ctrl + K cut (Program Editor only)
Shift + F6 Ctrl + L Log 日志窗口
Shift + F7 Left Ctrl + M Mark 标记,增强型编辑器不支持
Shift + F8 Right Ctrl + Q Filename 当前文件
Shift + F9 Ctrl + R Rfind 查找
Shift + F10 Wpopup 鼠标右键 Ctrl + T Title 标题内容
Shift + F11 Ctrl + U unmark
Shift + F12 dmcopylsv Ctrl + W access Explorer window 资源管理器
Ctrl + F1 Ctrl + Y
Ctrl + F2 RMB Wpopup 鼠标右键
Ctrl + F3 Shift + RMB
Ctrl + F11 Ctrl + RMB
Ctrl + F12


MMB
Shift+ MMB Ctrl + MMB
鼠标中键,未定义
二 打印预览快捷键
Keyboard Shortcuts within Print Preview
快捷键 作用
Alt + N Next page or Page Down 翻后页
Alt + P Previous page or Page Up 翻前页
Alt + Z Zoom 缩小
Alt + H Help 帮助文件
Alt + R
Alt + C orAlt + F4
Print 打印
Close the window 关闭窗口
三 增强型编辑器中的快捷键
Keyboard Shortcuts within the Enhanced Editor
红色加粗为 SAS公司认为最有用的快捷键 。
类别 快捷键 作用
缩写Abbreviation这个东东很少见,目前还不知道怎么用。 Ctrl + Shift + A Add a new abbreviation
Alt + F1 + No Selection Bring up word tip
Esc Hide the current word tip
代码Code Folding Alt + Ctrl + Number pad – Collapse all folding blocks收缩代码块
Alt + Number pad – Collapse current line
Alt + Ctrl + Number pad + Expand all folding blocks 扩展代码块
Alt + Number pad + Expand current line
Alt + Number pad * Toggle expand current line
命令/宏支持Command/Macro Support Ctrl + Shift + M Add or change macros
Ctrl + F1 Execute the last recorded macro执行最后一个记录中的宏
Alt + F8 Play a command/macro
Alt + Shift + R Start/Complete macro
编辑Edit Ctrl + C Copy selection 复制
Ctrl + X Cut selection 剪切
Delete Delete current character 删除
Backspace or Shift + Backspace Delete previous character
Ctrl + Delete Delete to next word start
Ctrl + Backspace Delete to previous word start
Enter Insert a carriage return
Ctrl + V Paste from clipboard 粘贴
Ctrl + YAlt + Shift + Backspace Redo
Ctrl + ZAlt + Backspace Undo
帮助Help place the insertion point within a procedure name and press F1 Get Help for a SAS procedure查找对应帮助主题
F1 Context Help 帮助文件
行标记Line Markers F2 Go to the next marked line
Shift + F2 Go to the previous marked line
Ctrl + F2 Toggle marker on the current line
导航Navigation Ctrl + G Go to line (interactive)
Ctrl + Page UpCtrl + Home Move cursor to the top of the file
Ctrl + Page DownCtrl + End Move cursor to the bottom of the file
Down Move cursor down
Page Down Move cursor down a page
Left Move cursor left
Right Move cursor right
Home Move cursor to beginning of line
End Move cursor to end of line
Ctrl + [ Ctrl + ] Move cursor to matching brace/parentheses移动光标匹配 括号
Alt + [ Alt + ] Move cursor to matching DO/END keyword 移动光标匹配DO/END
Alt + Right Move cursor to next case change移动光标到下一个大小写转换处
Ctrl + Right Move cursor to next word start
Alt + Left Move cursor to previous case change移动光标到上一个大小写转换处
Ctrl + Left Move cursor to previous word start
Up Move cursor up
Page Up Move cursor up a page
Alt + Up Move cursor to the first visible line
Alt + Down Move cursor to the last visible line
Ctrl + Up Scroll screen down
Ctrl + Down Scroll screen up
Option Setting Insert Toggle insert/overwrite mode
选择Selection Shift + Left Extend selection character left
Shift + Right Extend selection character right
Shift + Down Extend selection down
Shift + Page Down Extend selection down a page
Ctrl + Shift + HomeCtrl + Shift + Page Up Extend selection to beginning of document
Shift + Home Extend selection to beginning of line
Ctrl + Shift + EndCtrl + Shift + Page Down Extend selection to end of document
Shift + End Extend selection to end of line
Alt + Shift + Right Extend selection to next case change
Alt + Shift + Left Extend selection to previous case change
Shift + Up Extend selection up
Shift + Page Up Extend selection up a page
Ctrl + Shift + Left Extend selection to previous word start
Ctrl + Shift + Right Extend selection to the next word start
Ctrl + A Select all 选择全部
选择操作Selection Operations Ctrl + Shift + W Clean up whitespace 清除空白
Ctrl + / Comment the selection with line comments 给选定代码加注释符号/**/
Ctrl + Shift + L 选定字母文本变小写
Ctrl + Shift + U 选定字母文本变大写
Tab + Selection Tab selection
Ctrl + Shift + /
Shift + Tab + Selection
Undo the Comment 去除注释/**/
Left Tab selection
四 SAS主要窗口的键盘快捷键
Keyboard Shortcuts within the SAS Main Window
类别 快捷键 作用
对话框和入口Dialog boxes and Entry Fields Tab move to next field
Shift + Tab move to previous field
文本导航Navigate around Text Ctrl + -> (right arrow) move to next word
Ctrl + <- (left arrow) move to previous word
Home move to beginning of line
End move to end of line
Ctrl + Home move to top 光标移到代码最前
Ctrl + End move to bottom光标移到代码最后
Page Up page up
Page Down page down
Ctrl + Page Up move to top
Ctrl + Page Down move to bottom
Ctrl + Tab navigate to the next open SAS window (NEXTWIND command)
Ctrl + Shift + Tab navigate to the previous open SAS window (PREVWIND command)
标记文本Mark Text Shift + -> (right arrow) mark while going to the right
Shift + <- (left arrow) mark while going to the left
Shift + Home mark to beginning of line
Shift + End mark to end of line
Shift + Ctrl + Home mark to top
Shift + Ctrl + End mark to bottom
Shift + Page Up page up and mark
Shift + Page Down page down and mark
Shift + Ctrl + Page Up mark to top
Shift + Ctrl + Page Down mark to bottom
Shift + MB1 extend the current marked text selection to the click position
剪切,复制,粘贴Cut, Copy, and Paste Delete delete the next character (or marked text)
Ctrl + Delete delete from the insertion point position to the end of the current word
Ctrl + Backspace delete from the insertion point position to the start of the current word
Ctrl + MB1 selects the entire line (clicked line)
Ctrl + Z undo previous action
Ctrl + X cut selected text 剪切代码
Ctrl + C copy selected text to pastebuffer复制
Ctrl + V paste text 粘贴
窗口控制Window Control Alt switch focus to or from the main menu bar
Shift + F5 cascade the windows
Shift + F4 tile the windows vertically
Shift + F3 tile the windows horizontally
Ctrl + F6 next window 激活下一个窗口
Alt + F4 exit SAS 离开SAS系统
Ctrl + F4 close the active window
Shift + F10 open context menu
Resizing the Docking View Alt + W + S start docking view resizing
-> (right arrow) move the split bar a small amount to the right
<- (left arrow) move the split bar a small amount to the right
Ctrl + -> (right arrow) move the split bar a larger amount to the right
Ctrl + <- (left arrow) move the split bar a larger amount to the left
Home move the split bar all the way to the left
End move the split bar all the way to the right
Return accept the current size of the docking view and exit docking view resizing
Esc end docking view resizing without resizing the docking view
杂项Miscellaneous Alt + Enter open the Properties dialog box for a selected object. This command is valid only in a Tree view or a List view.
Esc + letter (or number)
color or highlighting attributes in NOTEPAD window
来自:SAS资源列表
原文链接:http://saslist.net/archives/93
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-18 23:17:00
第二类 函数 windows环境下函数;
CALL SOUND Generates a sound with a specific frequency and duration.
MCIPISLP Causes SAS to wait for a piece of multimedia equipment to become active.
MCIPISTR Submits an MCI string command to a piece of multimedia equipment.
MODULE
WAKEUP
Calls a specific routine or module that resides in an external dynamic link library (DLL).
Specifies the time a SAS DATA step begins execution.
第三类,OpenVMS虚拟内存环境下函数;
ASCEBC Converts an input character string from ASCII to EBCDIC.
CALL FINDEND Releases resources that are associated with a directory search.
DELETE Deletes a file.
EBCASC Converts an input character string from EBCDIC to ASCII.
FILEATTR Returns the attribute information for a specified file.
FINDFILE Searches a directory for a file.
GETDVI Returns a specified item of information from a device.
GETJPI Retrieves job-process informations.
GETLOG Returns information about a DCL logical name.
GETMSG Translates an OpenVMS error code into text.
GETQUOTA Retrieves disk quota information.
GETSYM Returns the value of a DCL symbol.
GETTERM Returns the characteristics of your terminal device.
MODULE Calls a specific routine or module that resides in a sharable image.
NODENAME Returlns the name of the current node.
PUTLOG Creates an OpenVMS logical-name in your process-level logical name table.
PUTSYM Creates a DCL symbol in the parent SAS process.
SETTERM Modifies a characteristic of your terminal device.
TERMIN Allows simple input from SYS$INPUT.
TERMOUT Allows simple output to SYS$OUTPUT.
TTCLOSE Closes a channel that was previously assigned by TTOPEN.
TTCONTRL Modifies the characteristics of a channel that was previously assigned by TTOPEN.
TTOPEN Assigns an I/O channel to a terminal.
TTREAD Reads characters from the channel assigned by TTOPEN.
TTWRITE
VMS
Writes characters to the channel assigned by TTOPEN.
Spawns a subprocess and executes a DCL command.
第四类,z/OS操作环境下函数,
CALL TSO Issues a TSO command or invokes a CLIST or a REXX exec during a SAS session.
CALL WTO Sends a message to the system console.
TSO
WTO
Issues a TSO command or invokes a CLIST or a REXX exec during a SAS session.
Sends a message to the system console.
第五类,宏语言函数;
%BQUOTE, %NRBQUOTE Masks special characters and mnemonic operators in a resolved value at macro execution.
%EVAL Evaluates arithmetic and logical expressions using integer arithmetic.
%INDEX Returns the position of the first character of a string.
%LENGTH Returns the length of a string.
%QUOTE, %NRQUOTE Masks special characters and mnemonic operators in a resolved value at macro execution.
%SCAN, %QSCAN Searches for a word that is specified by its position in a string.
%STR, %NRSTR Masks special characters and mnemonic operators in constant text at macro compilation.
%SUBSTR, %QSUBSTR Produces a substring of a character string.
%SUPERQ Masks all special characters and mnemonic operators at macro execution but prevents further resolution of the value.
%SYMEXIST Returns an indication of the existence of a macro variable.
%SYMGLOBL Returns an indication as to whether a macro variable is global in scope.
%SYMLOCAL Returns an indication as to whether a macro variable is local in scope,
%SYSEVALF Evaluates arithmetic and logical expressions using floating-point arithmetic.
%SYSFUNC, %QSYSFUNC Executes SAS functions or user-written functions.
%SYSGET Returns the value of the specified operating environment variable.
%SYSPROD Reports whether a SAS software product is licenses at the site.
%UNQUOTE
%UPCASE, %QUPCASE
During macro execution, unmasks all special characters and mnemonic operators for a value.
Converts values to uppercase.
第六类,多国语言函数,
EUROCURR Converts one European currency to another.
GETPXLANGUAGE Returns the current two letter language code.
GETPXLOCALE Returns the POSIX locale value for a SAS locale.
GETPXREGION Returns the current two letter region code.
KCOMPARE Returns the result of a comparison of character expressions.
KCOMPRESS Removes specified characters from a character expression.
KCOUNT Returns the number of double-byte characters in an expression.
KCVT Converts data from one type of encoding data toanother encoding data.
KINDEX Searches a character expression for a string of characters.
KINDEXC Searches a character expression for specified characters.
KLEFT Left-aligns a character expression by removing unnecessary leading DBCS blanks and SO/SI.
KLENGTH Returns the length of an argument.
KLOWCASE Converts all letters in an argument to lowercase.
KREVERSE Reverses a character expression.
KRIGHT Right-aligns a character expression by trimming trailing DBCS blanks and SO/SI.
KSCAN Selects a specified word from a character expression.
KSTRCAT Concatenates two or more character expressions.
KSUBSTR Extracts a substring from an argument.
KSUBSTRB Extracts a substring from an argument according to the byte position of the substring in the argument.
KTRANSLATE Replaces specific characters in a character expression.
KTRIM Removes trailing DBCS blanks and SO/SI from character expressions.
KTRUNCATE Truncates a numeric value to a specified length.
KUPCASE Converts all single-byte letters in an argument to uppercase.
KUPDATE Inserts, deletes, and replaces character value contents.
KUPDATEB Inserts, deletes, and replaces the contents of the character value according to the byte position of the character value in the argument.
KVERIFY Returns the position of the first character that is unique to an expression.
NLDATE Converts the SAS date value to the date value of the specified locale by using the date format descriptors.
NLDATM Converts the SAS datetime value to the time value of the specified locale by using the datetime- format descriptors.
NLTIME Converts the SAS time or the datetime value to the time value of the specified locale by using the NLTIME descriptors.
SORTKEY Creates a linguistic sort key.
TRANTAB Transcodes data by using the specified translation table.
VARTRANSCODE Returns the transcode attribute of a SAS data set variable.
VTRANSCODE Returns a value that indicates whether transcoding is enabled for the specified character variable.
VTRANSCODEX Returns a value that indicates whether transcoding is enabled for the specified argument.
UNICODELEN
UNICODEWIDTH
Specifies the length of the character unit for the Unicode data.
Specifies the length of a display unit for the Unicode data.
第七类,其他函数 以下是其他函数的不完全情况:
1,有模块有自己的专用函数,如IML模块里面的函数。
2,现在模块中出现,如果用得很多的话,就变成了常规函数,如有些函数是从其他版本中其他模块转过来的,如SAS/ETS的INTCINDEX,INTCYCLE等等; SAS High-Performance Forecasting的HOLIDAY和NWKDOM函数等等就是这样。
3,还有一类函数是SAS文档中没有记录的,比如说PROC SQL语句中的 MONOTONIC( ) 函数,但是可以使用的,半官方的解释就是不成熟,处于试用中的函数,这种函数有些地方确实能起到惊艳的作用,但需要小心使用,多测试,防止意外发生。
4,有些函数文档里一些情况也没叙述完全,可能在调试中。比如说函数indexw(),具体见说明见 mysas圈 。
5,也许还有其他的情况,待考。
另附SAS9.2中新增和变动的函数列表(中文):
以下为新增的函数和 CALL 例程:
ALLCOMB
以最小更改顺序一次从 n 个变量中任选 k 个值时生成的所有组合。
ALLPERM
以最小更改顺序生成若干变量的值的所有排列。
ARCOSH
返回反双曲余弦。
ARSINH
返回反双曲正弦。
ARTANH
返回反双曲正切。
CALL ALLCOMB
以最小更改顺序一次从 n 个变量中任选 k 个值时生成的所有组合。
CALL ALLCOMBI
以最小更改顺序一次从 n 个对象中任选 k 个指数时生成的所有组合。
CALL GRAYCODE
以最小更改顺序生成 n 个项的所有子集。
CALL ISO8601_CONVERT
将 ISO 8601 时间间隔转换为日期时间值和持续时间值,或将日期时间值和持续时间值转换为 ISO 8601 时间间隔。
CALL LEXCOMB
以字典顺序一次从 n 个变量中任选 k 个非缺失值时生成的所有非重复组合。
CALL LEXCOMBI
以字典顺序一次从 n 个对象中任选 k 个指数时生成的所有组合。
CALL LEXPERK
以字典顺序一次从 n 个变量中任选 k 个非缺失值时生成的所有非重复排列。
CALL LEXPERM
以字典顺序生成若干变量的非缺失值的所有非重复排列。
CALL SORTC
对字符参数的值进行排序。
CALL SORTN
对数值参数的值进行排序。
CATQ
使用分隔符分隔各个项,并将含该分隔符的字符串用引号引起来,以此连接字符或数值。
CHAR
从字符串的指定位置返回单个字符。
CMISS
统计缺失参数的数量。
COUNTW
统计字符表达式中的字词数。
DIVIDE
返回用于处理 ODS 输出的特殊缺失值的除法结果。
ENVLEN
返回环境变量的长度。
EUCLID
返回非缺失参数的欧氏范数。
FINANCE
执行财务计算,如折旧、到期时间、应计利息、净现值、定期储蓄和内部收益率。
FINDW
在字符串中搜索单词。
FIRST
返回字符串的第一个字符。
GCD
返回一个或多个整数的最大公约数。
GEODIST
返回两个纬度和经度坐标之间的大地距。
GRAYCODE
以最小更改顺序生成 n 个项的所有子集。
INTFIT
返回两个日期之间的时间间隔。
INTGET
返回基于三个日期值或日期时间值的时间间隔。
INTSHIFT
返回与基时间间隔相对应的移位时间间隔。
INTTEST
若时间间隔有效,返回 1;若时间间隔无效,则返回 0。
LCM
返回能被一组数中的每个数整除的最小倍数。
LCOMB
计算 COMB 函数的对数,即一次从 n 个对象中任选 r 个的组合数的对数。
LEXCOMB
以字典顺序一次从 n 个变量中任选 k 个非缺失值时生成的所有非重复组合。
LEXCOMBI
以字典顺序一次从 n 个对象中任选 k 个指数时生成的所有组合。
LEXPERK
以字典顺序一次从 n 个变量中任选 k 个非缺失值时生成的所有非重复排列。
LEXPERM
以字典顺序生成若干变量的非缺失值的所有非重复排列。
LFACT
计算 FACT(阶乘)函数的对数。
LOG1PX
返回 1 加该参数的对数。
LPERM
计算 PERM 函数的对数,即从 n 个对象中任选 r 个元素的排列数的对数。
LPNORM
返回第二个参数和随后的非缺失参数的 Lp 范数。
MD5
返回指定的字符串的消息摘要的结果。
MSPLINT
返回保单调插值样条的纵坐标。
RENAME
重命名 SAS 逻辑库的成员、外部文件或目录。
SUMABS
返回非缺失参数的绝对值的总和。
TRANSTRN
若一个字符串中的某个子串的值大于零,则在该字符串中替换找到的所有该子串。
WHICHC
搜索与第一个参数相等的字符值,并返回第一个匹配值的索引。
WHICHN
搜索与第一个参数相等的数值,并返回第一个匹配值的索引。
ZIPCITYDISTANCE
返回两个邮政编码位置之间的大地距。
改进了以下函数中的参数说明:
DOPEN
打开目录,并返回一个目录标识符值。
EXIST
验证 SAS 逻辑库成员是否存在。
FOPEN
打开外部文件并返回一个文件标识符值。
FEXIST
验证与文件引用名相关的外部文件是否存在。
FILENAME
为外部文件、目录或输出设备分配或取消分配文件引用名。
FILEREF
验证是否已将文件引用名分配给当前 SAS 会话。
LIBNAME
为 SAS 逻辑库分配或取消分配逻辑库引用名。
LIBREF
验证是否已分配逻辑库引用名。
MOPEN
根据目录 ID 和成员名称打开文件,并返回文件标识符或 0。
PATHNAME
返回 SAS 逻辑库或外部文件的物理名称,或返回一个空格。
以下函数以前包含在 Risk Dimensions 中,现已成为 Base SAS 的一部分:
BLACKCLPRC
根据 Black 模型计算欧式期货期权的买权价格。
BLACKPTPRC
根据 Black 模型计算欧式期货期权的卖权价格。
BLKSHCLPRT
根据 Black-Scholes 模型计算欧式期权的买权价格。
BLKSHPTPRT
根据 Black-Scholes 模型计算欧式期权的卖权价格。
GARKHCLPRC
根据 Garman-Kohlhagen 模型计算欧式股票期权的买权价格。
GARKHPTPRC
根据 Garman-Kohlhagen 模型计算欧式股票期权的卖权价格。
MARGRCLPRC
根据 Margrabe 模型计算欧式股票期权的买权价格。
MARGRPTPRC
根据 Margrabe 模型计算欧式股票期权的卖权价格。
以下函数以前包含在 SAS/ETS 中,现已成为 Base SAS 的一部分:
INTCINDEX
按给定日期、时间或日期时间值,返回周期指数。
INTCYCLE
按给定日期、时间或日期时间间隔,返回下一较高季节周期的日期、时间或日期时间间隔。
INTFMT
按给定日期、时间或日期时间间隔,返回推荐的格式。
INTINDEX
按给定日期、时间或日期时间间隔和值,返回季节指数。
INTSEAS
按给定日期、时间或日期时间间隔,返回季节周期的长度。
以下函数以前包含在 SAS High-Performance Forecasting 中,现已成为 Base SAS 的一部分:
HOLIDAY
返回指定年中指定假日的日期。
NWKDOM
返回指定年的指定月中某个星期几第 n 次出现时的日期。
以下函数已由 SAS 语言参考:字典转移到 SAS/IML 文档:
MODULEIC
调用外部例程,并返回一个字符值(仅在 IML 环境下)。
MODULEIN
调用外部例程,并返回一个数值(仅在 IML 环境下)。
CALL MODULEI
调用外部例程,但不返回任何代码(仅在 IML 环境下)。
以下函数和 CALL 例程已增强:
CALL POKE
现在可以直接将浮点数写入基于 32 位平台的内存。
CALL POKELONG
现在可以直接将浮点数写入基于 32 位平台和 64 位平台的内存。
CALL SCAN
返回字符表达式中给定单词的位置和长度。
DATDIF
已将“ACT/360”和“ACT/365”这两个值添加到 basis 参数,并在美国证券业协会出版的文档中添加了一条参考信息。
FSEP
为十六进制字符分隔符添加了一个可选参数。
INDEX
添加了说明如何处理开头空格和结尾空格的示例。
LAG
添加了关于 LAG 函数内存限制的信息。
SCAN
返回字符表达式中的第 n 个单词。
ZIPSTATE
在文档中添加了关于美国陆军邮局 (Army Post Office, APO) 和美国海军邮局 (Fleet Post Office, FPO) 的信息。
RX 函数集和 CALL 例程已从文档中删除,取而代之的是一组 PRX 函数和 CALL 例程。这些 PRX 函数和 CALL 例程在 SAS 以前的版本中已可以使用,可以提供强大的功能。
以下为已删除的 RX 函数和 CALL 例程:
RXMATCH 函数
RXPARSE 函数
RXCHANGE CALL 例程
RXFREE CALL 例程
RXSUBSTR CALL 例程
SCANQ 函数和 CALL SCANQ 例程已从文档中删除,由功能强大的 SCAN 函数和 CALL SCAN 例程取代。
以上参考文献来源主要为: SAS9.2随机帮助 美国SAS研究所2009
本文为 数据分析网 原创文章,转载或内容合作请联系我们,未经允许谢绝转载,本文链接:https://www.afenxi.com/14306.html 。
数据分析
2016-04-17 23:23:00
SAS 提供了大量的内置函数,并且在数量和内容上不断的发展改进,从版本9.2开始还提供了自定义函数功能。使用合适的函数,将会使你的工作效率加倍。
SAS9.2 的常规函数已达到499个。庞大的函数库确实给SASor们带来了非常多的方便,但是仓库式的SAS builted in帮助太杂乱,常常让人有一种“不识庐山真面目,只缘身在此山中”的感觉。有时,需要的函数找不到,找到的函数又不合适。其实SAS很体贴地不断增加高效的函数来精简你的代码和提高编程速度,可惜很多函数,SASor们并不知晓,常常看到别人使用的时候,才惊叹“原来SAS已经提供了这样的函数,我编了半天小算法”,或者“白费这么大劲,编了个宏”等等。这里按类列出SAS9.2版本的函数,供大家参考。
按不同的使用环境,SAS一共有七大类函数:
一,常规函数 ;二,windows环境下函数;三,OpenVMS虚拟内存环境下函数;四,z/OS操作环境下函数,五,宏语言函数;六,多国语言函数,七,其他函数
第一类函数常规函数最常用,数量也最多,这里依次列出所有的常规函数。
Character 字符函数
函数名称 功能
ANYALNUM Function Searches a character string for an alphanumeric character, and returns the first position at which the character is found.
ANYALPHA Function Searches a character string for an alphabetic character, and returns the first position at which the character is found.
ANYCNTRL Function Searches a character string for a control character, and returns the first position at which that character is found.
ANYDIGIT Function Searches a character string for a digit, and returns the first position at which the digit is found.
ANYFIRST Function Searches a character string for a character that is valid as the first character in a SAS variable name under VALIDVARNAME=V7, and returns the first position at which that character is found.
ANYGRAPH Function Searches a character string for a graphical character, and returns the first position at which that character is found.
ANYLOWER Function Searches a character string for a lowercase letter, and returns the first position at which the letter is found.
ANYNAME Function Searches a character string for a character that is valid in a SAS variable name under VALIDVARNAME=V7, and returns the first position at which that character is found.
ANYPRINT Function Searches a character string for a printable character, and returns the first position at which that character is found.
ANYPUNCT Function Searches a character string for a punctuation character, and returns the first position at which that character is found.
ANYSPACE Function Searches a character string for a white-space character (blank, horizontal and vertical tab, carriage return, line feed, and form feed), and returns the first position at which that character is found.
ANYUPPER Function Searches a character string for an uppercase letter, and returns the first position at which the letter is found.
ANYXDIGIT Function Searches a character string for a hexadecimal character that represents a digit, and returns the first position at which that character is found.
BYTE Function Returns one character in the ASCII or the EBCDIC collating sequence.
CALL CATS Routine Removes leading and trailing blanks, and returns a concatenated character string.
CALL CATT Routine Removes trailing blanks, and returns a concatenated character string.
CALL CATX Routine Removes leading and trailing blanks, inserts delimiters, and returns a concatenated character string.
CALL COMPCOST Routine Sets the costs of operations for later use by the COMPGED function
CALL MISSING Routine Assigns missing values to the specified character or numeric variables.
CALL SCAN Routine Returns the position and length of the nth word from a character string.
CAT Function Does not remove leading or trailing blanks, and returns a concatenated character string.
CATQ Function Concatenates character or numeric values by using a delimiter to separate items and by adding quotation marks to strings that contain the delimiter.
CATS Function Removes leading and trailing blanks, and returns a concatenated character string.
CATT Function Removes trailing blanks, and returns a concatenated character string.
CATX Function Removes leading and trailing blanks, inserts delimiters, and returns a character string.
CHAR Function Returns a single character from a specified position in a character string.
CHOOSEC Function Returns a character value that represents the results of choosing from a list of arguments.
CHOOSEN Function Returns a numeric value that represents the results of choosing from a list of arguments.
COALESCEC Function Returns the first non-missing value from a list of character arguments.
COLLATE Function Returns a character string in ASCII or EBCDIC collating sequence.
COMPARE Function Returns the position of the leftmost character by which two strings differ, or returns 0 if there is no difference.
COMPBL Function Removes multiple blanks from a character string.
COMPGED Function Returns the generalized edit distance between two strings.
COMPLEV Function Returns the Levenshtein edit distance between two strings.
COMPRESS Function Returns a character string with specified characters removed from the original string.
COUNT Function Counts the number of times that a specified substring appears within a character string.
COUNTC Function Counts the number of characters in a string that appear or do not appear in a list of characters.
COUNTW Function Counts the number of words in a character string.
DEQUOTE Function Removes matching quotation marks from a character string that begins with a quotation mark, and deletes all characters to the right of the closing quotation mark.
FIND Function Searches for a specific substring of characters within a character string.
FINDC Function Searches a string for any character in a list of characters.
FINDW Function Returns the character position of a word in a string, or returns the number of the word in a string.
FIRST Function Returns the first character in a character string.
IFC Function Returns a character value based on whether an expression is true, false, or missing.
INDEX Function Searches a character expression for a string of characters, and returns the position of the string’s first character for the first occurrence of the string.
INDEXC Function Searches a character expression for any of the specified characters, and returns the position of that character.
INDEXW Function Searches a character expression for a string that is specified as a word, and returns the position of the first character in the word.
LEFT Function Left-aligns a character string.
LENGTH Function Returns the length of a non-blank character string, excluding trailing blanks, and returns 1 for a blank character string.
LENGTHC Function Returns the length of a character string, including trailing blanks.
LENGTHM Function Returns the amount of memory (in bytes) that is allocated for a character string.
LENGTHN Function Returns the length of a character string, excluding trailing blanks.
LOWCASE Function Converts all letters in an argument to lowercase.
MD5 Function Returns the result of the message digest of a specified string.
MISSING Function Returns a numeric result that indicates whether the argument contains a missing value.
NLITERAL Function Converts a character string that you specify to a SAS name literal.
NOTALNUM Function Searches a character string for a non-alphanumeric character, and returns the first position at which the character is found.
NOTALPHA Function Searches a character string for a nonalphabetic character, and returns the first position at which the character is found.
NOTCNTRL Function Searches a character string for a character that is not a control character, and returns the first position at which that character is found.
NOTDIGIT Function Searches a character string for any character that is not a digit, and returns the first position at which that character is found.
NOTFIRST Function Searches a character string for an invalid first character in a SAS variable name under VALIDVARNAME=V7, and returns the first position at which that character is found.
NOTGRAPH Function Searches a character string for a non-graphical character, and returns the first position at which that character is found.
NOTLOWER Function Searches a character string for a character that is not a lowercase letter, and returns the first position at which that character is found.
NOTNAME Function Searches a character string for an invalid character in a SAS variable name under VALIDVARNAME=V7, and returns the first position at which that character is found.
NOTPRINT Function Searches a character string for a nonprintable character, and returns the first position at which that character is found.
NOTPUNCT Function Searches a character string for a character that is not a punctuation character, and returns the first position at which that character is found.
NOTSPACE Function Searches a character string for a character that is not a white-space character (blank, horizontal and vertical tab, carriage return, line feed, and form feed), and returns the first position at which that character is found.
NOTUPPER Function Searches a character string for a character that is not an uppercase letter, and returns the first position at which that character is found.
NOTXDIGIT Function Searches a character string for a character that is not a hexadecimal character, and returns the first position at which that character is found.
NVALID Function Checks the validity of a character string for use as a SAS variable name.
PROPCASE Function Converts all words in an argument to proper case.
QUOTE Function Adds double quotation marks to a character value.
RANK Function Returns the position of a character in the ASCII or EBCDIC collating sequence.
REPEAT Function Returns a character value that consists of the first argument repeated n+1 times.
REVERSE Function Reverses a character string.
RIGHT Function Right aligns a character expression.
SCAN Function Returns the nth word from a character string.
SOUNDEX Function Encodes a string to facilitate searching.
SPEDIS Function Determines the likelihood of two words matching, expressed as the asymmetric spelling distance between the two words.
STRIP Function Returns a character string with all leading and trailing blanks removed.
SUBPAD Function Returns a substring that has a length you specify, using blank padding if necessary.
SUBSTR (left of =) Function Replaces character value contents.
SUBSTR (right of =) Function Extracts a substring from an argument.
SUBSTRN Function Returns a substring, allowing a result with a length of zero.
TRANSLATE Function Replaces specific characters in a character string.
TRANSTRN Function Replaces all occurrences of a substring found in a character string, allowing a zero-length replacement string.
TRANWRD Function Replaces or removes all occurrences of a substring in a character string.
TRIM Function Removes trailing blanks from a character string, and returns one blank if the string is missing.
TRIMN Function Removes trailing blanks from character expressions, and returns a string with a length of zero if the expression is missing.
UPCASE Function
VERIFY Function
Converts all letters in an argument to uppercase.
Returns the position of the first character in a string that is not in any of several other strings.
日期和时间函数 Date and Time
CALL IS8601_CONVERT Routine Converts an ISO 8601 interval to datetime and duration values, or converts datetime and duration values to an ISO 8601 interval.
DATDIF Function Returns the number of days between two dates.
DATE Function Returns the current date as a SAS date value.
DATEJUL Function Converts a Julian date to a SAS date value.
DATEPART Function Extracts the date from a SAS datetime value.
DATETIME Function Returns the current date and time of day as a SAS datetime value.
DAY Function Returns the day of the month from a SAS date value.
DHMS Function Returns a SAS datetime value from date, hour, minute, and second values.
HMS Function Returns a SAS time value from hour, minute, and second values.
HOLIDAY Function Returns a SAS date value of a specified holiday for a specified year.
HOUR Function Returns the hour from a SAS time or datetime value.
INTCINDEX Function Returns the cycle index when a date, time, or datetime interval and value are specified.
INTCK Function Returns the count of the number of interval boundaries between two dates, two times, or two datetime values.
INTCYCLE Function Returns the date, time, or datetime interval at the next higher seasonal cycle when a date, time, or datetime interval is specified.
INTFIT Function Returns a time interval that is aligned between two dates.
INTFMT Function Returns a recommended SAS format when a date, time, or datetime interval is specified.
INTGET Function Returns a time interval based on three date or datetime values.
INTINDEX Function Returns the seasonal index when a date, time, or datetime interval and value are specified.
INTNX Function Increments a date, time, or datetime value by a given time interval, and returns a date, time, or datetime value.
INTSEAS Function Returns the length of the seasonal cycle when a date, time, or datetime interval is specified.
INTSHIFT Function Returns the shift interval that corresponds to the base interval.
INTTEST Function Returns 1 if a time interval is valid, and returns 0 if a time interval is invalid.
JULDATE Function Returns the Julian date from a SAS date value.
JULDATE7 Function Returns a seven-digit Julian date from a SAS date value.
MDY Function Returns a SAS date value from month, day, and year values.
MINUTE Function Returns the minute from a SAS time or datetime value.
MONTH Function Returns the month from a SAS date value.
NWKDOM Function Returns the date for the nth occurrence of a weekday for the specified month and year.
QTR Function Returns the quarter of the year from a SAS date value.
SECOND Function Returns the second from a SAS time or datetime value.
TIME Function Returns the current time of day as a numeric SAS time value.
TIMEPART Function Extracts a time value from a SAS datetime value.
TODAY Function Returns the current date as a numeric SAS date value.
WEEK Function Returns the week-number value.
WEEKDAY Function From a SAS date value, returns an integer that corresponds to the day of the week.
YEAR Function Returns the year from a SAS date value.
YRDIF Function
YYQ Function
Returns the difference in years between two dates.
Returns a SAS date value from year and quarter year values.
描述统计函数 Descriptive Statistics
CMISS Function Counts the number of missing arguments.
CSS Function Returns the corrected sum of squares.
CV Function Returns the coefficient of variation.
EUCLID Function Returns the Euclidean norm of the non-missing arguments.
GEOMEAN Function Returns the geometric mean.
GEOMEANZ Function Returns the geometric mean, using zero fuzzing.
HARMEAN Function Returns the harmonic mean.
HARMEANZ Function Returns the harmonic mean, using zero fuzzing.
IQR Function Returns the interquartile range.
KURTOSIS Function Returns the kurtosis.
LARGEST Function Returns the kth largest non-missing value.
LPNORM Function Returns the Lp norm of the second argument and subsequent non-missing arguments.
MAD Function Returns the median absolute deviation from the median.
MAX Function Returns the largest value.
MEAN Function Returns the arithmetic mean (average).
MEDIAN Function Returns the median value.
MIN Function Returns the smallest value.
MISSING Function Returns a numeric result that indicates whether the argument contains a missing value.
N Function Returns the number of non-missing numeric values.
NMISS Function Returns the number of missing numeric values.
ORDINAL Function Returns the kth smallest of the missing and nonmissing values.
PCTL Function Returns the percentile that corresponds to the percentage.
RANGE Function Returns the range of the nonmissing values.
RMS Function Returns the root mean square of the nonmissing arguments.
SKEWNESS Function Returns the skewness of the nonmissing arguments.
SMALLEST Function Returns the kth smallest nonmissing value.
STD Function Returns the standard deviation of the nonmissing arguments.
STDERR Function Returns the standard error of the mean of the nonmissing arguments.
SUM Function Returns the sum of the nonmissing arguments.
SUMABS Function Returns the sum of the absolute values of the non-missing arguments.
USS Function
VAR Function
Returns the uncorrected sum of squares of the nonmissing arguments.
Returns the variance of the nonmissing arguments.
数学函数 Mathematical
ABS Function Returns the absolute value.
AIRY Function Returns the value of the Airy function.
BETA Function Returns the value of the beta function.
CALL LOGISTIC Routine Applies the logistic function to each argument.
CALL SOFTMAX Routine Returns the softmax value.
CALL STDIZE Routine Standardizes the values of one or more variables.
CALL TANH Routine Returns the hyperbolic tangent.
CNONCT Function Returns the noncentrality parameter from a chi-square distribution.
COALESCE Function Returns the first non-missing value from a list of numeric arguments.
CONSTANT Function Computes machine and mathematical constants.
DAIRY Function Returns the derivative of the AIRY function.
DEVIANCE Function Returns the deviance based on a probability distribution.
DIGAMMA Function Returns the value of the digamma function.
ERF Function Returns the value of the (normal) error function.
ERFC Function Returns the value of the complementary (normal) error function.
EXP Function Returns the value of the exponential function.
FACT Function Computes a factorial.
FNONCT Function Returns the value of the noncentrality parameter of an F distribution.
GAMMA Function Returns the value of the gamma function.
GCD Function Returns the greatest common divisor for one or more integers.
IBESSEL Function Returns the value of the modified Bessel function.
JBESSEL Function Returns the value of the Bessel function.
LCM Function Returns the least common multiple.
LGAMMA Function Returns the natural logarithm of the Gamma function.
LOG Function Returns the natural (base e) logarithm.
LOG1PX Function Returns the log of 1 plus the argument.
LOG10 Function Returns the logarithm to the base 10.
LOG2 Function Returns the logarithm to the base 2.
LOGBETA Function Returns the logarithm of the beta function.
MOD Function Returns the remainder from the division of the first argument by the second argument, fuzzed to avoid most unexpected floating-point results.
MODZ Function Returns the remainder from the division of the first argument by the second argument, using zero fuzzing.
MSPLINT Function Returns the ordinate of a monotonicity-preserving interpolating spline.
SIGN Function Returns the sign of a value.
SQRT Function Returns the square root of a value.
TNONCT Function
TRIGAMMA Function
Returns the value of the noncentrality parameter from the Student’s t distribution.
Returns the value of the trigamma function.
分布密度函数、分布函数 Probability
CDF Function Returns a value from a cumulative probability distribution.
LOGCDF Function Returns the logarithm of a left cumulative distribution function.
LOGPDF Function Returns the logarithm of a probability density (mass) function.
LOGSDF Function Returns the logarithm of a survival function.
PDF Function Returns a value from a probability density (mass) distribution.
POISSON Function Returns the probability from a Poisson distribution.
PROBBETA Function Returns the probability from a beta distribution.
PROBBNML Function Returns the probability from a binomial distribution.
PROBBNRM Function Returns a probability from a bivariate normal distribution.
PROBCHI Function Returns the probability from a chi-square distribution.
PROBF Function Returns the probability from an F distribution.
PROBGAM Function Returns the probability from a gamma distribution.
PROBHYPR Function Returns the probability from a hypergeometric distribution.
PROBMC Function Returns a probability or a quantile from various distributions for multiple comparisons of means.
PROBNEGB Function Returns the probability from a negative binomial distribution.
PROBNORM Function Returns the probability from the standard normal distribution.
PROBT Function
SDF Function
Returns the probability from a t distribution.
Returns a survival function.
二进制逻辑操作符 Bitwise Logical Operations
BAND Function Returns the bitwise logical AND of two arguments.
BLSHIFT Function Returns the bitwise logical left shift of two arguments.
BNOT Function Returns the bitwise logical NOT of an argument.
BOR Function Returns the bitwise logical OR of two arguments.
BRSHIFT Function
BXOR Function
Returns the bitwise logical right shift of two arguments.
Returns the bitwise logical EXCLUSIVE OR of two arguments.
数组函数 Array
DIM Function Returns the number of elements in an array.
HBOUND Function
LBOUND Function
Returns the upper bound of an array.
Returns the lower bound of an array.
字符串配对函数 Character String Matching
CALL PRXCHANGE Routine Performs a pattern-matching replacement.
CALL PRXDEBUG Routine Enables Perl regular expressions in a DATA step to send debugging output to the SAS log.
CALL PRXFREE Routine Frees memory that was allocated for a Perl regular expression.
CALL PRXNEXT Routine Returns the position and length of a substring that matches a pattern, and iterates over multiple matches within one string.
CALL PRXPOSN Routine Returns the start position and length for a capture buffer.
CALL PRXSUBSTR Routine Returns the position and length of a substring that matches a pattern.
PRXCHANGE Function Performs a pattern-matching replacement.
PRXMATCH Function Searches for a pattern match and returns the position at which the pattern is found.
PRXPAREN Function Returns the last bracket match for which there is a match in a pattern.
PRXPARSE Function
PRXPOSN Function
Compiles a Perl regular expression (PRX) that can be used for pattern matching of a character value.
Returns a character string that contains the value for a capture buffer.
组合函数 Combinatorial
ALLCOMB Function Generates all combinations of the values of n variables taken k at a time in a minimal change order.
ALLPERM Function Generates all permutations of the values of several variables in a minimal change order.
CALL ALLCOMB Routine Generates all combinations of the values of n variables taken k at a time in a minimal change order.
CALL ALLCOMBI Routine Generates all combinations of the indices of n objects taken k at a time in a minimal change order.
CALL ALLPERM Routine Generates all permutations of the values of several variables in a minimal change order.
CALL GRAYCODE Routine Generates all subsets of n items in a minimal change order.
CALL LEXCOMB Routine Generates all distinct combinations of the non-missing values of n variables taken k at a time in lexicographic order.
CALL LEXCOMBI Routine Generates all combinations of the indices of n objects taken k at a time in lexicographic order.
CALL LEXPERK Routine Generates all distinct permutations of the non-missing values of n variables taken k at a time in lexicographic order.
CALL LEXPERM Routine Generates all distinct permutations of the non-missing values of several variables in lexicographic order.
CALL RANPERK Routine Randomly permutes the values of the arguments, and returns a permutation of k out of n values.
CALL RANPERM Routine Randomly permutes the values of the arguments.
COMB Function Computes the number of combinations of n elements taken r at a time.
GRAYCODE Function Generates all subsets of n items in a minimal change order.
LCOMB Function Computes the logarithm of the COMB function; that is, the logarithm of the number of combinations of n objects taken r at a time.
LEXCOMB Function Generates all distinct combinations of the non-missing values of n variables taken k at a time in lexicographic order.
LEXCOMBI Function Generates all combinations of the indices of n objects taken k at a time in lexicographic order.
LEXPERK Function Generates all distinct permutations of the non-missing values of n variables taken k at a time in lexicographic order.
LEXPERM Function Generates all distinct permutations of the non-missing values of several variables in lexicographic order.
LFACT Function Computes the logarithm of the FACT (factorial) function.
LPERM Function
PERM Function
Computes the logarithm of the PERM function; that is, the logarithm of the number of permutations of n objects, with the option of including r number of elements.
Computes the number of permutations of n items that are taken r at a time.
双曲线函数 Hyperbolic
ARCOSH Function Returns the inverse hyperbolic cosine.
ARSINH Function Returns the inverse hyperbolic sine.
ARTANH Function Returns the inverse hyperbolic tangent.
COSH Function Returns the hyperbolic cosine.
SINH Function
TANH Function
Returns the hyperbolic sine.
Returns the hyperbolic tangent.
宏函数 Macro
CALL EXECUTE Routine Resolves the argument, and issues the resolved value for execution at the next step boundary.
CALL SYMPUT Routine Assigns DATA step information to a macro variable.
CALL SYMPUTX Routine Assigns a value to a macro variable, and removes both leading and trailing blanks.
RESOLVE Function Returns the resolved value of the argument after it has been processed by the macro facility.
SYMEXIST Function Returns an indication of the existence of a macro variable.
SYMGET Function Returns the value of a macro variable during DATA step execution.
SYMGLOBL Function
SYMLOCAL Function
Returns an indication of whether a macro variable is in global scope to the DATA step during DATA step execution.
Returns an indication of whether a macro variable is in local scope to the DATA step during DATA step execution.
分位数函数 Quantile
BETAINV Function Returns a quantile from the beta distribution.
CINV Function Returns a quantile from the chi-square distribution.
FINV Function Returns a quantile from the F distribution.
GAMINV Function Returns a quantile from the gamma distribution.
PROBIT Function Returns a quantile from the standard normal distribution.
QUANTILE Function
TINV Function
Returns the quantile from a distribution that you specify.
Returns a quantile from the t distribution.
搜索函数 Search
WHICHC Function WHICHN Function
Searches for a character value that is equal to the first argument, and returns the index of the first matching value. Searches for a numeric value that is equal to the first argument, and returns the index of the first matching value.
排序函数Sort
CALL SORTC Routine CALL SORTN Routine
Sorts the values of character arguments. Sorts the values of numeric arguments.
外部例程 External Routines
CALL MODULE Routine Calls an external routine without any return code.
MODULEC Function
MODULEN Function
Calls an external routine and returns a character value.
Calls an external routine and returns a numeric value.
三角函数Trigonometric
ARCOS Function Returns the arccosine.
ARSIN Function Returns the arcsine.
ATAN Function Returns the arc tangent.
ATAN2 Function Returns the arc tangent of the ratio of two numeric variables.
COS Function Returns the cosine.
SIN Function
TAN Function
Returns the sine.
Returns the tangent.
截断函数 Truncation
CEIL Function Returns the smallest integer that is greater than or equal to the argument, fuzzed to avoid unexpected floating-point results.
CEILZ Function Returns the smallest integer that is greater than or equal to the argument, using zero fuzzing.
FLOOR Function Returns the largest integer that is less than or equal to the argument, fuzzed to avoid unexpected floating-point results.
FLOORZ Function Returns the largest integer that is less than or equal to the argument, using zero fuzzing.
FUZZ Function Returns the nearest integer if the argument is within 1E-12 of that integer.
INT Function Returns the integer value, fuzzed to avoid unexpected floating-point results.
INTZ Function Returns the integer portion of the argument, using zero fuzzing.
ROUND Function Rounds the first argument to the nearest multiple of the second argument, or to the nearest integer when the second argument is omitted.
ROUNDE Function Rounds the first argument to the nearest multiple of the second argument, and returns an even multiple when the first argument is halfway between the two nearest multiples.
ROUNDZ Function
TRUNC Function
Rounds the first argument to the nearest multiple of the second argument, using zero fuzzing.
Truncates a numeric value to a specified number of bytes.
变量控制函数Variable Control
CALL LABEL Routine Assigns a variable label to a specified character variable.
CALL SET Routine
CALL VNAME Routine
Links SAS data set variables to DATA step or macro variables that have the same name and data type.
Assigns a variable name as the value of a specified variable.
算术函数 Arithmetic
DIVIDE
Returns the result of a division that handles special missing values for ODS output.
返回数值函数 Numeric
IFN Function
Returns a numeric value based on whether an expression is true, false, or missing.
网络工具函数Web Tools
HTMLDECODE Function Decodes a string that contains HTML numeric character references or HTML character entity references, and returns the decoded string.
HTMLENCODE Function Encodes characters using HTML character entity references, and returns the encoded string.
URLDECODE Function
URLENCODE Function
Returns a string that was decoded using the URL escape syntax.
Returns a string that was encoded using the URL escape syntax.
外部文件函数 External Files
DCLOSE Function Closes a directory that was opened by the DOPEN function.
DCREATE Function Returns the complete pathname of a new, external directory.
DINFO Function Returns information about a directory.
DNUM Function Returns the number of members in a directory.
DOPEN Function Opens a directory, and returns a directory identifier value.
DOPTNAME Function Returns directory attribute information.
DOPTNUM Function Returns the number of information items that are available for a directory.
DREAD Function Returns the name of a directory member.
DROPNOTE Function Deletes a note marker from a SAS data set or an external file.
FAPPEND Function Appends the current record to the end of an external file.
FCLOSE Function Closes an external file, directory, or directory member.
FCOL Function Returns the current column position in the File Data Buffer (FDB).
FDELETE Function Deletes an external file or an empty directory.
FEXIST Function Verifies the existence of an external file that is associated with a fileref.
FGET Function Copies data from the File Data Buffer (FDB) into a variable.
FILEEXIST Function Verifies the existence of an external file by its physical name.
FILENAME Function Assigns or deassigns a fileref to an external file, directory, or output device.
FILEREF Function Verifies whether a fileref has been assigned for the current SAS session.
FINFO Function Returns the value of a file information item.
FNOTE Function Identifies the last record that was read, and returns a value that the FPOINT function can use.
FOPEN Function Opens an external file and returns a file identifier value.
FOPTNAME Function Returns the name of an item of information about a file.
FOPTNUM Function Returns the number of information items that are available for an external file.
FPOINT Function Positions the read pointer on the next record to be read.
FPOS Function Sets the position of the column pointer in the File Data Buffer (FDB).
FPUT Function Moves data to the File Data Buffer (FDB) of an external file, starting at the FDB’s current column position.
FREAD Function Reads a record from an external file into the File Data Buffer (FDB).
FREWIND Function Positions the file pointer to the start of the file.
FRLEN Function Returns the size of the last record that was read, or, if the file is opened for output, returns the current record size.
FSEP Function Sets the token delimiters for the FGET function.
FWRITE Function Writes a record to an external file.
MOPEN Function Opens a file by directory ID and member name, and returns either the file identifier or a 0.
PATHNAME Function Returns the physical name of an external file or a SAS library, or returns a blank.
RENAME Function Renames a member of a SAS library, an entry in a SAS catalog, an external file, or a directory.
SYSMSG Function
SYSRC Function
Returns error or warning message text from processing the last data set or external file function.
Returns a system error number.
金融函数Financial
BLACKCLPRC Function Calculates call prices for European options on futures, based on the Black model.
BLACKPTPRC Function Calculates put prices for European options on futures, based on the Black model.
BLKSHCLPRC Function Calculates call prices for European options on stocks, based on the Black-Scholes model.
BLKSHPTPRC Function Calculates put prices for European options on stocks, based on the Black-Scholes model.
COMPOUND Function Returns compound interest parameters.
CONVX Function Returns the convexity for an enumerated cash flow.
CONVXP Function Returns the convexity for a periodic cash flow stream, such as a bond.
DACCDB Function Returns the accumulated declining balance depreciation.
DACCDBSL Function Returns the accumulated declining balance with conversion to a straight-line depreciation.
DACCSL Function Returns the accumulated straight-line depreciation.
DACCSYD Function Returns the accumulated sum-of-years-digits depreciation.
DACCTAB Function Returns the accumulated depreciation from specified tables.
DEPDB Function Returns the declining balance depreciation.
DEPDBSL Function Returns the declining balance with conversion to a straight-line depreciation.
DEPSL Function Returns the straight-line depreciation.
DEPSYD Function Returns the sum-of-years-digits depreciation.
DEPTAB Function Returns the depreciation from specified tables.
DUR Function Returns the modified duration for an enumerated cash flow.
DURP Function Returns the modified duration for a periodic cash flow stream, such as a bond.
FINANCE Function Computes financial calculations such as depreciation, maturation, accrued interest, net present value, periodic savings, and internal rates of return.
GARKHCLPRC Function Calculates call prices for European options on stocks, based on the Garman-Kohlhagen model.
GARKHPTPRC Function Calculates put prices for European options on stocks, based on the Garman-Kohlhagen model.
INTRR Function Returns the internal rate of return as a fraction.
IRR Function Returns the internal rate of return as a percentage.
MARGRCLPRC Function Calculates call prices for European options on stocks, based on the Margrabe model.
MARGRPTPRC Function Calculates put prices for European options on stocks, based on the Margrabe model.
MORT Function Returns amortization parameters.
NETPV Function Returns the net present value as a fraction.
NPV Function Returns the net present value with the rate expressed as a percentage.
PVP Function Returns the present value for a periodic cash flow stream (such as a bond), with repayment of principal at maturity.
SAVING Function
YIELDP Function
Returns the future value of a periodic saving.
Returns the yield-to-maturity for a periodic cash flow stream, such as a bond.
产生随机数函数 Random Number
CALL RANBIN Routine Returns a random variate from a binomial distribution.
CALL RANCAU Routine Returns a random variate from a Cauchy distribution.
CALL RANEXP Routine Returns a random variate from an exponential distribution.
CALL RANGAM Routine Returns a random variate from a gamma distribution.
CALL RANNOR Routine Returns a random variate from a normal distribution.
CALL RANPOI Routine Returns a random variate from a Poisson distribution.
CALL RANTBL Routine Returns a random variate from a tabled probability distribution.
CALL RANTRI Routine Returns a random variate from a triangular distribution.
CALL RANUNI Routine Returns a random variate from a uniform distribution.
CALL STREAMINIT Routine Specifies a seed value to use for subsequent random number generation by the RAND function.
NORMAL Function Returns a random variate from a normal, or Gaussian, distribution.
RANBIN Function Returns a random variate from a binomial distribution.
RANCAU Function Returns a random variate from a Cauchy distribution.
RAND Function Generates random numbers from a distribution that you specify.
RANEXP Function Returns a random variate from an exponential distribution.
RANGAM Function Returns a random variate from a gamma distribution.
RANNOR Function Returns a random variate from a normal distribution.
RANPOI Function Returns a random variate from a Poisson distribution.
RANTBL Function Returns a random variate from a tabled probability distribution.
RANTRI Function Returns a random variate from a triangular distribution.
RANUNI Function
UNIFORM Function
Returns a random variate from a uniform distribution.
Returns a random variate from a uniform distribution.
SAS文件IO函数 SAS File I/O
ATTRC Function Returns the value of a character attribute for a SAS data set.
ATTRN Function Returns the value of a numeric attribute for a SAS data set.
CEXIST Function Verifies the existence of a SAS catalog or SAS catalog entry.
CLOSE Function Closes a SAS data set.
CUROBS Function Returns the observation number of the current observation.
DROPNOTE Function Deletes a note marker from a SAS data set or an external file.
DSNAME Function Returns the SAS data set name that is associated with a data set identifier.
ENVLEN Function Returns the length of an environment variable.
EXIST Function Verifies the existence of a SAS library member.
FETCH Function Reads the next non-deleted observation from a SAS data set into the Data Set Data Vector (DDV).
FETCHOBS Function Reads a specified observation from a SAS data set into the Data Set Data Vector (DDV).
GETVARC Function Returns the value of a SAS data set character variable.
GETVARN Function Returns the value of a SAS data set numeric variable.
IORCMSG Function Returns a formatted error message for width=”20%”>LIBNAME Function Assigns or deassigns a libref for a SAS library.
LIBREF Function Verifies that a libref has been assigned.
NOTE Function Returns an observation ID for the current observation of a SAS data set.
OPEN Function Opens a SAS data set.
PATHNAME Function Returns the physical name of an external file or a SAS library, or returns a blank.
POINT Function Locates an observation that is identified by the NOTE function.
RENAME Function Renames a member of a SAS library, an entry in a SAS catalog, an external file, or a directory.
REWIND Function Positions the data set pointer at the beginning of a SAS data set.
SYSMSG Function Returns error or warning message text from processing the last data set or external file function.
SYSRC Function Returns a system error number.
VARFMT Function Returns the format that is assigned to a SAS data set variable.
VARINFMT Function Returns the informat that is assigned to a SAS data set variable.
VARLABEL Function Returns the label that is assigned to a SAS data set variable.
VARLEN Function Returns the length of a SAS data set variable.
VARNAME Function Returns the name of a SAS data set variable.
VARNUM Function
VARTYPE Function
Returns the number of a variable’s position in a SAS data set.
Returns the data type of a SAS data set variable.
特殊函数 Special
ADDR Function Returns the memory address of a variable on a 32-bit platform.
ADDRLONG Function Returns the memory address of a variable on 32-bit and 64-bit platforms.
CALL POKE Routine Writes a value directly into memory on a 32-bit platform.
CALL POKELONG Routine Writes a value directly into memory on 32-bit and 64-bit platforms.
CALL SLEEP Routine For a specified period of time, suspends the execution of a program that invokes this CALL routine.
CALL SYSTEM Routine Submits an operating environment command for execution.
DIF Function Returns differences between an argument and its nth lag.
GETOPTION Function Returns the value of a SAS system or graphics option.
INPUT Function Returns the value that is produced when SAS converts an expression using the specified informat.
INPUTC Function Enables you to specify a character informat at run time.
INPUTN Function Enables you to specify a numeric informat at run time.
LAG Function Returns values from a queue.
PEEK Function Stores the contents of a memory address in a numeric variable on a 32-bit platform.
PEEKC Function Stores the contents of a memory address in a character variable on a 32-bit platform.
PEEKCLONG Function Stores the contents of a memory address in a character variable on 32-bit and 64-bit platforms.
PEEKLONG Function Stores the contents of a memory address in a numeric variable on 32-bit and 64-bit platforms.
PTRLONGADD Function Returns the pointer address as a character variable on 32-bit and 64-bit platforms.
PUT Function Returns a value using a specified format.
PUTC Function Enables you to specify a character format at run time.
PUTN Function Enables you to specify a numeric format at run time.
SLEEP Function For a specified period of time, suspends the execution of a program that invokes this function.
SYSGET Function Returns the value of the specified operating environment variable.
SYSPARM Function Returns the system parameter string.
SYSPROCESSID Function Returns the process ID of the current process.
SYSPROCESSNAME Function Returns the process name that is associated with a given process ID, or returns the name of the current process.
SYSPROD Function Determines whether a product is licensed.
SYSTEM Function
UUIDGEN Function
Issues an operating environment command during a SAS session, and returns the system return code.
Returns the short or binary form of a Universal Unique Identifier (UUID).
变量信息函数 Variable Information
CALL VNEXT Routine Returns the name, type, and length of a variable that is used in a DATA step.
VARRAY Function Returns a value that indicates whether the specified name is an array.
VARRAYX Function Returns a value that indicates whether the value of the specified argument is an array.
VFORMAT Function Returns the format that is associated with the specified variable.
VFORMATD Function Returns the decimal value of the format that is associated with the specified variable.
VFORMATDX Function Returns the decimal value of the format that is associated with the value of the specified argument.
VFORMATN Function Returns the format name that is associated with the specified variable.
VFORMATNX Function Returns the format name that is associated with the value of the specified argument.
VFORMATW Function Returns the format width that is associated with the specified variable.
VFORMATWX Function Returns the format width that is associated with the value of the specified argument.
VFORMATX Function Returns the format that is associated with the value of the specified argument.
VINARRAY Function Returns a value that indicates whether the specified variable is a member of an array.
VINARRAYX Function Returns a value that indicates whether the value of the specified argument is a member of an array.
VINFORMAT Function Returns the informat that is associated with the specified variable.
VINFORMATD Function Returns the decimal value of the informat that is associated with the specified variable.
VINFORMATDX Function Returns the decimal value of the informat that is associated with the value of the specified variable.
VINFORMATN Function Returns the informat name that is associated with the specified variable.
VINFORMATNX Function Returns the informat name that is associated with the value of the specified argument.
VINFORMATW Function Returns the informat width that is associated with the specified variable.
VINFORMATWX Function Returns the informat width that is associated with the value of the specified argument.
VINFORMATX Function Returns the informat that is associated with the value of the specified argument.
VLABEL Function Returns the label that is associated with the specified variable.
VLABELX Function Returns the label that is associated with the value of the specified argument.
VLENGTH Function Returns the compile-time (allocated) size of the specified variable.
VLENGTHX Function Returns the compile-time (allocated) size for the variable that has a name that is the same as the value of the argument.
VNAME Function Returns the name of the specified variable.
VNAMEX Function Validates the value of the specified argument as a variable name.
VTYPE Function Returns the type (character or numeric) of the specified variable.
VTYPEX Function Returns the type (character or numeric) for the value of the specified argument.
VVALUE Function
VVALUEX Function
Returns the formatted value that is associated with the variable that you specify.
Returns the formatted value that is associated with the argument that you specify.
美国人专用函数 与地理位置有关的一些函数 美国人对美国人真好
函数名 作用
Distance距离函数 GEODIST Function Returns the geodetic distance between two latitude and longitude coordinates.
ZIPCITYDISTANCE Function Returns the geodetic distance between two zip code locations.
State and Zip Code州和邮政编码 FIPNAME Function Converts two-digit FIPS codes to uppercase state names.
FIPNAMEL Function Converts two-digit FIPS codes to mixed case state names.
FIPSTATE Function Converts two-digit FIPS codes to two-character state postal codes.
STFIPS Function Converts state postal codes to FIPS state codes.
STNAME Function Converts state postal codes to uppercase state names.
STNAMEL Function Converts state postal codes to mixed case state names.
ZIPCITY Function Returns a city name and the two-character postal code that corresponds to a zip code.
ZIPCITYDISTANCE Function Returns the geodetic distance between two zip code locations.
ZIPFIPS Function Converts zip codes to two-digit FIPS codes.
ZIPNAME Function Converts zip codes to uppercase state names.
ZIPNAMEL Function
ZIPSTATE Function
Converts zip codes to mixed case state names.
Converts zip codes to two-character state postal codes.
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-04-16 23:21:00
你喜欢的东西我也喜欢
我们将从 推荐系统 开始,开启 数据挖掘 之旅。推荐系统无处不在,如亚马逊网站的“看过这件商品的顾客还购买过”板块:
last.fm上对音乐和演唱会的推荐(相似歌手):
在亚马逊的例子里,它用了两个元素来进行推荐:一是我浏览了里维斯翻译的《法华经》一书;二是其他浏览过该书的顾客还浏览过的译作。
本章我们讲述的推荐方法称为 协同过滤 。顾名思义,这个方法是利用他人的喜好来进行推荐,也就是说,是大家一起产生的推荐。他的工作原理是这样的:如果要推荐一本书给你,我会在网站上查找一个和你类似的用户,然后将他喜欢的书籍推荐给你——比如巴奇加卢比的《发条女孩》。
如何找到相似的用户
所以首先要做的工作是找到相似的用户。这里用最简单的二维模型来描述。假设用户会在网站用五颗星来评价一本书——没有星表示书写得很糟,五颗星表示很好。因为我们用的是二维模型,所以仅对两本书进行评价:史蒂芬森的《雪崩》(纵轴)和拉尔森的《龙纹身的女孩》(横轴)。
首先,下表显示有三位用户对这两本书做了评价:
现在我想为神秘的X先生推荐一本书,他给《雪崩》打了四星,《龙纹身的女孩》两星。第一个任务是找出哪个用户和他最为相似。我们用距离来表示。
曼哈顿距离
最简单的距离计算方式是曼哈顿距离。在二维模型中,每个人都可以用(x, y)的点来表示,这里我用下标来表示不同的人,(x1, y1)表示艾米,(x2, y2)表示那位神秘的X先生,那么他们之间的曼哈顿距离就是:
也就是x之差的绝对值加上y之差的绝对值,这样他们的距离就是4。
完整的计算结果如下:
艾米的距离最近,在她的浏览历史中可以看到她曾给巴奇加卢比的《发条女孩》打过五星,于是我们就可以把这本书推荐给X先生。
欧几里得距离
曼哈顿距离的优点之一是计算速度快,对于Facebook这样需要计算百万用户之间的相似度时就非常有利。
勾股定理
也许你还隐约记得勾股定理。另一种计算距离的方式就是看两点之间的直线距离:
利用勾股定理,我们可以如下计算距离:
这条斜线就是欧几里得距离,公式是:
回顾一下,这里的x1表示用户1喜欢《龙纹身》的程度,x2是用户2喜欢这本书的程度;y1则是用户1喜欢《雪崩》的程度,y2是用户2喜欢这本书的程度。
艾米给《龙纹身》和《雪崩》都打了五颗星,神秘的X先生分别打了两星和四星,这样他们之间的欧几里得距离就是:
以下是全部用户的计算结果:
N维模型
刚才我们仅仅对两本书进行评价(二维模型),下面让我们扩展一下,尝试更复杂的模型。假设我们现在要为一个在线音乐网站的用户推荐乐队。用户可以用1至5星来评价一个乐队,其中包含半星(如2.5星)。下表展示了8位用户对8支乐队的评价:
表中的短横表示这位用户没有给这支乐队打分。我们在计算两个用户的距离时,只采用他们都评价过的乐队,比如要计算Angelica和Bill的距离,我们只会用到5支乐队。这两个用户的曼哈顿距离为:
最后距离即是上方数据的加和:(1.5 + 1.5 + 3 + 2 + 1)。
计算欧几里得距离的方法也是类似的,我们也只取双方都评价过的乐队。
用公式来描述即:
掌握了吗 那就试试计算其他几个用户之间的距离吧。
有个瑕疵
当我们计算Hailey和Veronica的距离时会发现一个问题:他们共同评价的乐队只有两支(Norah Jones和The Strokes),而Hailey和Jordyn共同评价了五支乐队,这似乎会影响我们的计算结果,因为Hailey和Veronica之间是二维的,而Haily和Veronica之间是五维的。曼哈顿距离和欧几里得距离在数据完整的情况下效果最好。如何处理缺失数据,这在研究领域仍是一个活跃的话题。本书的后续内容会进行一些讨论,这里先不展开。现在,让我们开始构建一个推荐系统吧。
推广:闵可夫斯基距离
我们可以将曼哈顿距离和欧几里得距离归纳成一个公式,这个公式称为闵可夫斯基距离:
其中:
r = 1 该公式即曼哈顿距离
r = 2 该公式即欧几里得距离
r = ∞ 极大距离
当你在书中看到这些数学公式,你可以选择快速略过它,继续读下面的文字,过去我就是这样;你也可以停下来,好好分析一下这些公式,会发现其实它们并不难理解。比如上面的公式,当r = 1时,可以简化成如下形式:
仍用上文的音乐站点为例,x和y分别表示两个用户,d(x, y)表示他们之间的距离,n表示他们共同评价过的乐队数量,我们之前已经做过计算:
其中Difference一栏表示两者评分之差的绝对值,加起来等于9,也就是他们之间的距离。
当r = 2时,我们得到欧几里得距离的计算公式:
提前预告一下:r值越大,单个维度的差值大小会对整体距离有更大的影响。
使用 Python 代码来表示数据(终于要开始编程了)
在Python中,我们可以用多种方式来描述上表中的数据,这里我选择Python的字典类型(或者称为关联数组、哈希表)。
注:本书的所有代码可以在这里找到。
我们可以用以下方式来获取某个用户的评分:
计算曼哈顿距离
我们可以做一下测试:
下面我们编写一个函数来找出距离最近的用户(其实该函数会返回一个用户列表,按距离排序):
简单测试一下:
最后,我们结合以上内容来进行推荐。假设我想为Hailey做推荐,这里我找到了离他距离最近的用户Veronica。然后,我会找到出Veronica评价过但Hailey没有评价的乐队,并假设Hailey对这些陌生乐队的评价会和Veronica相近。比如,Hailey没有评价过Phoenix乐队,而Veronica对这个乐队打出了4分,所以我们认为Hailey也会喜欢这支乐队。下面的函数就实现了这一逻辑:
下面我们就可以用它来为Hailey做推荐了:
运行结果和我们的预期相符。我们看可以看到,和Hailey距离最近的用户是Veronica,Veronica对Phoenix乐队打了4分。我们再试试其他人:
我们可以猜想Chan会喜欢The Strokes乐队,而Sam不会太欣赏Deadmau5。
对于Angelica,我们得到了空的返回值,也就是说我们无法对其进行推荐。让我们看看是哪里有问题:
Angelica最相似的用户是Veronica,让我们回头看看数据:
我们可以看到,Veronica评价过的乐队,Angelica也都评价过了,所以我们没有推荐。
之后,我们会讨论如何解决这一问题。
作业:实现一个计算闵可夫斯基距离的函数,并在计算用户距离时使用它。
用户的问题
让我们仔细看看用户对乐队的评分,可以发现每个用户的打分标准非常不同: Bill没有打出极端的分数,都在2至4分之间; Jordyn似乎喜欢所有的乐队,打分都在4至5之间; Hailey是一个有趣的人,他的分数不是1就是4。
那么,如何比较这些用户呢比如Hailey的4分相当于Jordan的4分还是5分呢我觉得更接近5分。这样一来就会影响到推荐系统的准确性了。
左:我非常喜欢Broken Bells乐队,所以我给他们打4分!
右:Broken Bells乐队还可以,我打4分。
皮尔逊相关系数
解决方法之一是使用皮尔逊相关系数。简单起见,我们先看下面的数据(和之前的数据不同):
这种现象在 数据挖掘 领域称为“分数膨胀”。Clara最低给了4分——她所有的打分都在4至5分之间。我们将它绘制成图表:
一条直线——完全吻合!!!
直线即表示Clara和Robert的偏好完全一致。他们都认为Phoenix是最好的乐队,然后是Blues Traveler、Norah Jones。如果Clara和Robert的意见不一致,那么落在直线上的点就越少。
意见基本一致的情形
意见不太一致的情形
所以从图表上理解,意见相一致表现为一条直线。皮尔逊相关系数用于衡量两个变量之间的相关性(这里的两个变量指的是Clara和Robert),它的值在-1至1之间,1表示完全吻合,-1表示完全相悖。从直观上理解,最开始的那条直线皮尔逊相关系数为1,第二张是0.91,第三张是0.81。因此我们利用这一点来找到相似的用户。
皮尔逊相关系数的计算公式是:
这里我说说自己的经历。我大学读的是现代音乐艺术,课程包括芭蕾、现代舞、服装设计等,没有任何数学课程。我高中读的是男子学校,学习了管道工程和汽车维修,只懂得很基础的数学知识。不知是因为我的学科背景,还是习惯于用直觉来思考,当我遇到这样的数学公式时会习惯性地跳过,继续读下面的文字。如果你和我一样,我强烈建议你与这种惰性抗争,试着去理解这些公式。它们虽然看起来很复杂,但还是能够被常人所理解的。
上面的公式除了看起来比较复杂,另一个问题是要获得计算结果必须对数据做多次遍历。好在我们有另外一个公式,能够计算皮尔逊相关系数的近似值:
这个公式虽然看起来更加复杂,而且其计算结果会不太稳定,有一定误差存在,但它最大的优点是,用代码实现的时候可以只遍历一次数据,我们会在下文看到。首先,我们将这个公式做一个分解,计算下面这个表达式的值:
对于Clara和Robert,我们可以得到:
很简单把下面我们计算这个公式:
Clara的总评分是22.5, Robert是15,他们评价了5支乐队,因此:
所以,那个巨型公式的分子就是70 – 67.5 = 2.5。
下面我们来看分母:
首先:
我们已经计算过Clara的总评分是22.5,它的平方是506.25,除以乐队的数量5,得到101.25。综合得到:
对于Robert,我们用同样的方法计算:
最后得到:
因此,1表示Clara和Robert的偏好完全吻合。
先休息一下吧
计算皮尔逊相关系数的代码
测试一下:
最后一个公式:余弦相似度
这里我将奉上最后一个公式:余弦相似度。它在文本挖掘中应用得较多,在协同过滤中也会使用到。为了演示如何使用该公式,我们换一个示例。这里记录了每个用户播放歌曲的次数,我们用这些数据进行推荐:
简单扫一眼上面的数据(或者用之前讲过的距离计算公式),我们可以发现Ann的偏好和Sally更为相似。
问题在哪儿
我在iTunes上有大约4000首歌曲,下面是我最常听的音乐:
可以看到,Moonlight Sonata这首歌我播放了25次,但很有可能你一次都没有听过。事实上,上面列出的这些歌曲可能你一首都没听过。此外,iTunes上有1500万首音乐,而我只听过4000首。所以说单个用户的数据是 稀疏 的,因为非零值较总体要少得多。当我们用1500万首歌曲来比较两个用户时,很有可能他们之间没有任何交集,这样一来就无从计算他们之间的距离了。
类似的情况是在计算两篇文章的相似度时。比如说我们想找一本和《The Space Pioneers》相类似的书,方法之一是利用单词出现的频率,即统计每个单词在书中出现的次数占全书单词的比例,如“the”出现频率为6.13%,“Tom” 0.89%,“space” 0.25%。我们可以用这些数据来寻找一本相近的书。但是,这里同样有数据的稀疏性问题。《The Space Pioneers》中有6629个不同的单词,但英语语言中有超过100万个单词,这样一来非零值就很稀少了,也就不能计算两本书之间的距离。
余弦相似度的计算中会略过这些非零值。它的计算公式是:
其中,“·”号表示数量积。“||x||”表示向量x的模,计算公式是:
我们用上文中“偏好完全一致”的示例:
所以两个向量为:
它们的模是:
数量积的计算:
因此余弦相似度是:
余弦相似度的范围从1到-1,1表示完全匹配,-1表示完全相悖。所以0.935表示匹配度很高。
作业:尝试计算Angelica和Veronica的余弦相似度
应该使用哪种相似度
我们整本书都会探索这个问题,以下是一些提示:
如果数据存在“分数膨胀”问题,就使用皮尔逊相关系数。
如果数据比较“密集”,变量之间基本都存在公有值,且这些距离数据是非常重要的,那就使用欧几里得或曼哈顿距离。
如果数据是稀疏的,则使用余弦相似度。
所以,如果数据是密集的,曼哈顿距离和欧几里得距离都是适用的。那么稀疏的数据可以使用吗我们来看一个也和音乐有关的示例:假设有三个人,每人都给100首音乐评过分。
Jake(左):乡村音乐的忠实听众。
Linda和Eric(右):我们爱六十年代的摇滚乐!
Linda和Eric喜欢相同的音乐,他们的评分列表中有20首相同的的歌曲,且评分均值相差不到0.5!所以他们之间的曼哈顿距离为20 x 0.5 = 10,欧几里得距离则为:
Linda和Jake只共同评分了一首歌曲:Chris Cagle的 What a Beautiful Day 。Linda打了3分,Jake打了5分,所以他们之间的曼哈顿距离为2,欧几里得距离为:
所以不管是曼哈顿距离还是欧几里得距离,Jake都要比Eric离Linda近,这不符合实际情况。
嘿,我想到一个办法。人们给音乐打分是从1到5分,那些没有打分的音乐就统一给0分好了,这样就能解决数据稀疏的问题了!
想法不错,但是这样做也不行。为了解释这一问题,我们再引入两个人到例子里来:Cooper和Kelsey。他们和Jake都有着非常相似的音乐偏好,其中Jake在我们网站上评价了25首歌曲。
Cooper评价了26首歌曲,其中25首和Jake是一样的。他们对每首歌曲的评价差值只有0.25!
Kelsey在我们网站上评价了150首歌曲,其中25首和Jake相同。和Cooper一样,她和Jake之间的评价差值也只有0.25!
所以我们从直觉上看Cooper和Keylsey离Jake的距离应该相似。但是,当我们计算他们之间的曼哈顿距离和欧几里得距离时(代入0值),会发现Cooper要比Keylsey离Jake近得多。
为什么呢
我们来看下面的数据:
从4、5、6这三首歌来看,两人离Jake的距离是相同的,但计算出的曼哈顿距离却不这么显示:
问题就在于数据中的0值对结果的影响很大,所以用0代替空值的方法并不比原来的方程好。还有一种变通的方式是计算“平均值”——将两人共同评价过的歌曲分数除以歌曲数量。
总之,曼哈顿距离和欧几里得距离在数据完整的情况下会运作得非常好,如果数据比较稀疏,则要考虑使用余弦距离。
古怪的现象
假设我们要为Amy推荐乐队,她喜欢Phoenix、Passion Pit、以及Vampire Weekend。和她最相似的用户是Bob,他也喜欢这三支乐队。他的父亲为Walter Ostanek乐队演奏手风琴,所以受此影响,他给了这支乐队5星评价。按照我们现在的推荐逻辑,我们会将这支乐队推荐给Amy,但有可能她并不喜欢。
或者试想一下,Billy Bob Olivera教授喜欢阅读数据挖掘方面的书籍以及科幻小说,他最邻近的用户是我,因为我也喜欢这两种书。然而,我又是一个贵宾犬的爱好者,所以给《贵宾犬的隐秘生活》这本书打了很高的分。这样一来,现有的推荐方法会将这本书介绍给Olivera教授。
问题就在于我们只依靠最相似的 一个 用户来做推荐,如果这个用户有些特殊的偏好,就会直接反映在推荐内容里。解决方法之一是找寻多个相似的用户,这里就要用到K最邻近算法了。
K最邻近算法
在协同过滤中可以使用K最邻近算法来找出K个最相似的用户,以此作为推荐的基础。不同的应用有不同的K值,需要做一些实验来得出。以下给到读者一个基本的思路。
假设我要为Ann做推荐,并令K=3。使用皮尔逊相关系数得到的结果是:
这三个人都会对推荐结果有所贡献,问题在于我们如何确定他们的比重呢我们直接用相关系数的比重来描述,Sally的比重是0.8/2=40%,Eric是0.7/2=35%,Amanda则是25%:
假设他们三人对Grey Wardens的评分以及加权后的结果如下:
最后计算得到的分数为:
Python推荐模块
我将本章学到的内容都汇集成了一个Python类,虽然代码有些长,我还是贴在了这里:
运行示例
首先构建一个推荐类,然后获取推荐结果:
现在让我们使用一个更为真实的数据集。Cai-Nicolas Zeigler从图书漂流站收集了超过100万条评价数据——278,858位用户为271,379本书打了分。这份数据(匿名)可以从这个地址获得,有SQL和CSV两种格式。由于特殊符号的关系,这些数据无法直接加载到Python里。我做了一些清洗,可以从这里下载。
CSV文件包含了三张表: 用户表,包括用户ID、位置、年龄等信息。其中用户的姓名已经隐去; 书籍表,包括ISBN号、标题、作者、出版日期、出版社等; 评分表,包括用户ID、书籍ISBN号、以及评分(0-10分)。
上文Python代码中的loadBookDB方法可以加载这些数据,用法如下:
注意 由于数据集比较大,大约需要几十秒的时间加载和查询。
项目实践
只有运行调试过书中的代码后才能真正掌握这些方法,以下是一些实践建议: 实现一个计算曼哈顿距离和欧几里得距离的方法; 本书的网站上有一个包含25部电影评价的数据集,实现一个推荐算法。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2015-05-02 20:40:00
分析一款产品,要重点关注三项内容:用户,需求和数据。
大部分人都会关注用户和需求,但会忽略数据。一方面,主观上不重视,不会关注。另一方面,觉得不是份内事,运营小伙伴做就好了。
实际上,数据对产品经理来说很重要。功能上线后,关注数据的变化能了解用户的态度,这个比看用户反馈要客观得多。反馈表达的是个体的声音,数据量化的是群体的行为,要客观得多。
一款产品(特指APP)的 数据指标 体系一般都可以分为:用户规模与质量、渠道分析、参与度分析、功能分析以用户属性分析。
1、用户规模和质量的分析包括总用户数、新用户数、留存用户、转化率。用户规模和质量是APP分析最重要的维度,其指标也是相对其他维度最多,产品负责人要重点关注这个维度的指标。
2、渠道分析主要是分析各渠道在相关的渠道质量的变化和趋势,以科学评估渠道质量,优化渠道推广策略。渠道分析尤其要重视,因为现在移动应用市场刷量作弊是以及业内公开的秘密。渠道分析可以从多个维度的数据来对比不同渠道的效果,比如从新增用户、活跃用户、次日留存率、单次使用时长等角度对比不同来源的用户,这样就可以根据数据找到最适合自身的渠道,从而获得最好的推广效果。
3、参与度分析主要是分析用户的活跃度,分析的维度主要是包括启动次数分析、使用时长分析、访问页面分析和使用时间间隔分析。
4、功能分析主要包括:
功能活跃指标:某个功能的活跃用户,使用量情况;功能验证;对产品功能的 数据分析 ,确保功能的取舍的合理性。
页面访问路径:用户从打开到离开应用整个过程中每一步骤的页面访问、跳转情况。页面访问路径是全量统计。通过路径分析得出用户类型的多样、用户使用产品目的的多样性,还原用户目的;通过路径分析,做用户细分;再通过用户细分,返回到产品的迭代
漏斗模型是用于分析产品中关键路径的转化率,以确定产品流程的设计是否合理,分析用户体验问题。用户转化率的分析,核心考察漏斗每一层的流失原因的分析。通过设置自定义事件以及漏斗来关注应用内每一步的转化率,以及转化率对收入水平的影响。通过分析事件和漏斗数据,可以针对性的优化转化率低的步骤,切实提高整体转化水平。
5、用户属性分析不管在我们的产品启动初期,还是战略的调整,分析用户画像都有着重要的意义。比如我们在产品设计前需要构建用户画像,指导设计、开发、运营;产品迭代过程需要收集用户数据,便于进行用户行为分析,与商业模式挂钩等等。
用户属性一般包括性别、年龄、职业、所在地、手机型号、使用网络情况。如果对用户的其他属性感兴趣的,可以到自的微信呢公众号后台或者其他诸如头条、uc等后台看用户属性都包含哪些维度。
以流量为中心、野蛮的运营时代已经结束,接下来的时代是以科学的数据作为依据,围绕着用户紧紧做精细化的运营时代。
部分内容来源于网络,若侵删。
本文由 99click 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/51872.html 。
数据分析
2018-05-10 18:47:00
市场营销从来就是一门玄学,到底是使用多图轮换来尽可能多地向顾客展示产品信息好,还是用静态图片只传递单一信息有效呢?到底哪一种能带来更高的商业转换率呢?本文作者告诉大家,与其一味随大流地在网站主页上使用“图片轮换”,不如看看调查数据和听听专家的意见,再做决定,毕竟跟谁走,都不如跟钱走来得实在。
就算没见过成百上千个,我相信你肯定也见过几十个图片轮换页面吧?这些图片会自动切换或者滚动(这种模式也称为“旋转供图”)。 你可能挺喜欢它们。 但事实是,这种展现图片的模式,可能不利于提高商业 转化率 。
既然这种模式没什么卵用,那为什么人们还是用得乐此不疲呢?原因有两个: 有些人认为这种展现图片的模式很酷炫。 但酷炫和赚钱可是两码事。 不同部门和各种经理都希望在公司主页上,尽可能多地展现他们的信息。
测试告诉了我们什么?
绝不只是我一个人这么想,许多转换率优化专家的实验,都说明了同一个事实:
来自Wider Funnel的Chris Goward评论道:“我们已经多次测试了轮换图片所带来的效果,发现这绝对不是展示主页内容的好方法。”
“图片轮换一无是处,真应该立即从首页上把它们删除。” 来自Site Tuner的Tim Ash是这么说的。
Jakob Nielsen(是的,就是那名可用性测试大师)在测试中证实了这一点。 他组织开展了一项可用性研究,在研究中,他让用户完成以下任务:在自动轮换幻灯片中,找出 “西门子对洗衣机是否有特别优惠?”。 这项信息被放在最明显的幻灯片上,但是用户却视而不见,因为“广告盲区”的效应,用户们忽略了这条消息。Nielsen总结认为,这些幻灯片完全被忽略了。
Notre Dame大学也对图片轮换的效果进行了测试。 在所有图片中,只有第一张幻灯片得到了消费者的关注(仅有1%!),其他幻灯片几乎没有人点击。而那张只获得了消费者1%关注度的幻灯片却占据了页面的一半版面。
产品设计大师Luke Wroblweski总结如下: “@ erunyon,基本上,数据告诉我,千万别使用图片轮换。”
– Luke Wroblewski(@lukew)2013年1月22日
在StackExchange UX上,有一些有关自动轮换图片的讨论。
以下是一些开展不同测试的人的说法:
Adam Fellows 说: 几乎我管理的所有测试都说明通过图片轮换展示的内容常被用户忽略。 很少有人与那些轮换幻灯片互动,很多消费者还认为他们长得像广告,所以我们发现‘广告盲区’效应就这样产生了。
在节省版面空间和提升内容质量,许多竞争信息也都会在同一个位置传递出去,这使得用户的关注点飘忽不定,无法专注。
这是另一个评论,来自Lee Duddell: 图片轮换能有效地告诉市场营销或者高级管理人员他们的新想法被展现在主页上。
但是,它们对用户而言是无用的,并且由于它们看起来和广告十分相似用户常常“跳过”他们。 因此,图片轮换的确是在主页上展示无用信息的好方法(它的作用请看本段第一句)。
总之,你可以用它们来承载用户在你的主页上一定会忽略的内容。 或者,如果你愿意,干脆就再也别用图片轮换来展示信息来,再也不要了。
顺便说一句,这些观点不是我自己的观点,是基于成千上万的用户的测试数据产生的结论。
最后一个评论来自Craig Kistler: 在我所做的所有测试中,主页上的图片轮转完全无效。一方面,除了展示的第一张图片,其他任何内容得到访问者交互的可能都会大大减少。 而且,轮转图片中所展示的信息与访客想寻找内容相匹配的机会很渺茫。 所以在这种情况下,图片轮转就成为了一个会被忽略的横幅。 在数次测试之后,访问者在进入带有大型轮转图片页面时所做的第一件事就是向下滚动页面,跳过图片轮转,并开始寻找按钮开始自己的下一步动作。
这里有两个主要原因,告诉我们为什么图片轮转不起作用: 理由#1:人眼对运动产生反应(会使我们错过重要的东西)
我们的大脑有3层,最古老的部分,在爬行动物身上也能看到。这一部分它主要与人类生存有关。对于爬行动物而言,地平线上任何突然的变化都有可能是生死攸关的问题。因此人眼对各种运动产生反应 – 包括不断移动的图像和轮播图片。
这听着很不错啊,对吧?
除非轮播图片是你网站上唯一的东西(这听着就不太好了!),无法展示更多的内容,这听着可不是一件好事。这意味着轮播图片带走了消费者对其他东西的关注 – 其实主页上除了轮播图片,还有其他重要的东西,比如定价,网站内容,产品讯息等等。 原因#2:消息太多等于没有消息
那些浏览网页的人们由于广告盲区对轮播图片毫不关心,但即使是那些注意到图片轮播的人,也无法从中找出有用的信息。
访问者前往你的网站。在轮播图片上看到一条消息,然后开始阅读。 “今年秋天你会……”啪!字不见了。通常图片播放的速度很快,快到人们甚至无法完成阅读就翻页了(即使那时候他们想要继续读)。
关注传递单一主要信息,然后采取行动,是更加有效的方法。 原因#3:广告盲区
这些提供信息的图片轮播看起来就像广告似的,人们浏览的时候往往会跳过它们。
用户需要有控制权
轮播图片的实用性极低 – 它们切换得太快,导航图标太小(如果上面有任何导航图标的话),并且即使用户想要手动浏览它们呈现的内容,它们也经常常自动移动。用户界面设计的关键原则之一就是,让用户享有控制权。
现在有很多电子商务网站还在使用图片轮换 – 我认为并不是这些网站基于测试结果认为图片轮换有效,而是由于从众心理 – “其他网站都有,我们的网站上也应该有”。
Forever21的图片轮换,就像我们说的一样糟糕 ——轮换展示三个优惠,每4秒更换一次:
如果人们看到的第一个优惠不是他们喜欢的(或者与他们的 兴趣,相关性比较低),那么怎么办呢?如果他们不喜欢三者中的任何一个呢?这些图片轮换肯定不会帮助你提高公司客户的长期价值。
但图片轮换值得称赞的一点是,一旦你点击图片轮播的箭头,图片自动轮换就会停止。不仅如此,当你稍后再回到这个网站时,网站会显示的是你想看的那张幻灯片。
我建议与其如此,不如呈现一个单一的静态报价。
这里是J.J.巴克利提供静态报价 – 只专注于传达一条消息:
一些过去使用图片轮播的企业,比如Adobe,Gap和Hilton现在也转为使用静态消息。
Adobe:
Gap:
大家应该能注意到,希尔顿有一个可以滑动图像的滑块键,但它不并会自动滑动。如果你想要移动的话,你可以单击按键实现:
结论
如果条件允许的话,尽量避免使用轮换图片。 不要跟风时尚,潮流总是会过时的,还是只追求钱比较实在。
那么不放轮换图片的话,要放上什么图片呢?你可以使用静态图像,或者: @kshermphoto我建议将其替换为用户实实在在的内容,因为那才是访客真正访问网站的原因。
– Erik Runyon(@erunyon)2013年1月22日
Brad Frost承认:“尽管轮换图片效果不佳,但我不知道怎么样能让它们快速消失”,并写下了另一篇 文章 ,告诉大家如何让轮换图片更好地发挥作用。
你的图片轮换体验是什么呢?无论你是网站所有者还是用户,都来和我们说说你的体验吧。
编译组出品。编辑:郝鹏程
本文翻译自 conversionxl.com, 原文链接 。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2018-05-09 17:16:00
文:Heidi Zak(电商ThirdLove联合创始人) 来源:Forbes 编译: 数据观
编者注:ThirdLove是美国一家贩售女性内衣的电商平台,专注于 大数据 领域的技术,2015年推出的app即可做到上传两张自己的照片就给出具体的内衣尺码。
电商所能收集到的数据量正在改变我们能为客户做的事。广告对特定人群的针对性越来越强。您可能已经发现,当您网购时,您收到的广告突然间也都是关于这件商品的。
我记得小时候看电视,要被迫忍受1小时的节目里反复重播四个广告。不管是男孩儿女孩儿,是7岁还是12岁——所有的人看到的广告都一模一样。
在那以后,我们走过了一段很长的路。现在,我们几乎可以跳过所有电视或线上广告。这并不是巧合,而是 大数据 的功劳。而大数据的未来将使所有人受益。
使用数据 创造更好的体验
数据影响电商领域的各个方面。在ThirdLove,我们的数据影响我们开发产品的方式,创造我们的客户历程,并确保我们的客户有一个美好的体验。一切都围绕着数据。
有时,女士们会好奇,为什么用我们网站上的“Fit Finder”[ Fit Finder:顾客以选择正确答案的方式回答几个问题后,网站就会推荐合适尺码的内衣。]就可以帮她们找到合适的内衣尺码。答案是六百万女性都用过它,在找合适的尺码这件事儿上,我们有相当多的数据来帮忙。
而这就是大数据真正能够帮到电商的地方—— 创造更好的体验 。举个例子,我们从Fit Finder中就收集了大约750万个数据点,这些数据几乎影响了我们业务的所有方面。每位参与测试的女士都会为这些数据添砖加瓦,然后让我们的建议变得更智能。
所有电商公司都拥有海量数据,这些数据正在改变公司与客户的交互方式。
追踪偏好
当人们走进一家实体店的时候,销售人员并不知道客户是谁,需要什么;是准备购买,还是要货比三家。这一切都是个谜。
但是在网购面前,这些都不是问题。如果客户允许cookies,电商公司就会知道顾客打哪儿来,是看到了Facebook上投放的广告,还是点了EDM里的按钮;是新访客还是老访客,购物车里有没有
商品,是不是清空了。
这种追踪方式让电商公司可以精准地锁定一定年龄、一定收入、喜欢这类产品的顾客。 他们无需取悦每一个到商城闲逛、或并不想购买商品的人。 公司可以把钱花在刀刃上。比起在时代广场上放置广告牌期待正确的人看到,公司可以利用数据,在合适的时间触达合适的客户。
这对客户来说,也是件好事。
迎合顾客
假如一位女士来到我们的商城,做了Fit Finder的尺码测验,然后决定空手而归,那么当她下次回到商城时,并不会重新启动Fit Finder,而是直接给她展示符合她尺码与胸型的内衣——为她定制的内容。
大数据使我们能够智能地细分客户群,从而个性化客户旅程。
跟许多人想象的不一样,商城不会对每位顾客做100%的个性化推送。但是有那么多的数据点,我们能够为特定类型的客户定制内容,这对我们和客户都意义非常。
客户告诉我们:我们希望你知道我们是谁。
他们希望自己回来的时候,能够有反应他们以前访问痕迹的体验;他们希望收到一封邮件,讨论他们喜欢的风格与尺码。没有大数据,我们无法凭空为顾客创造这些体验。
大数据是电商的下一个前沿,但其使用围绕着一个关键问题:
你是否为客户提供价值?
一切的一切都围绕着为客户创造他们在实体店无法获得的线上体验。(听起来是不是和“实体店才能创造体验”截然相反?)我们就是这个意思,而大数据会让我们走得更远。
本文为专栏文章,来自:数据观,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/51696.html 。
数据分析
2018-05-07 21:36:00
留存低,会员流失严重,会员不忠诚,销量持续低迷…….难题如何破解?
会员流失严重,缺乏忠诚度,粘性低,这时候就要想想是否忽略了一个重要的指标“复购率”呢?产品再好,活动做得再如何高大上,没有复购率,一切都是空谈。如何提高复购率?这是每个产品经理都必须要思考的问题。
何为复购率?
复购率即重复购买率,指消费者对该品牌产品或者服务的重复购买次数,重复购买率越多,则反应出消费者对品牌的忠诚度就越高,反之则越低。在这里决定复购率的则是用户(会员),所谓的回头客,复购率体现的是用户对产品的信任度。
重复购买率有两种计算方法
第一种是所有购买过产品的顾客,以每个人为独立单位重复购买产品的次数,比如有10个客户购买了产品,5个产生了重复购买,则重复购买率为50%;
第二种是按交易次数计算,即单位时间内重复购买交易次数与总交易次数的比值,如某月内,一共产生了100笔交易,其中有20个人有了二次购买,这20人中的10个人又有了三次购买,则重复购买次数为30次,重复购买率为30%。
一般我们都采用第一种计算方式。从计算方式里面也可以看出,如果复购率高,单个用户对产品的贡献度也就高,这也说明复购率指标对产品发展的健康度来说是很重要的。
我们再从其他方面来看下复购率的重要性:
分析来看,如果只是考量单次购买,或者新用户转化是利益驱动的,成本会持续上升,效果却是持续减弱的。想要让用户产生持续的购买行为,那么用户对产品的使用粘性,用户对产品的信任度就很关键。所以要想提升用户的重复购买率,在产品设计和产品运营商就需要花点心思。
提升复购率的方法和策略
以电商来说,任何一个电商网站都会对网站的会员行为十分关注,他们往往会根据会员的行为来调整网站产品布局,根据会员的喜好及分布区域策划相应的促销活动等等。
1、产品具备分析会员行为数据的基本功能
从购物行为来说,会员购买行为45%的决定都是出于习惯,未曾经过思考。如何养成用户的习惯,这就需要对会员的整体概况进行了解,包括网站的累计会员、新增会员、订单量、浏览量、购买会员数、重复购买率等等,这里就需要借助会员查询功能来实现,如图所示:

通过这些信息,你可以看出:哪些会员在网站只浏览,从未下单,甚至连下单期望都没有;哪些会员是网站的忠实用户:看的多,买的也多;哪些会员有大量的收藏、入篮行为,但并为实际下单;哪些会员会有相似的购买、浏览行为;等等。另外通过这些数据,可以为您制定 会员营销 提供有利的数据支撑。
2、解读会员行为数据,掌握会员喜好
借助 数据分析 工具,观察每个会员的浏览、入篮、购买、收藏等关键行为数据,从而分析会员买了哪些商品,哪些商品看了(或者入篮、收藏了)但没购买。通过这些数据,掌握会员的喜好。
3、根据会员的关键行为,进行会员精准推荐
根据会员行为,寻找二次销售机会,如EDM推送:收藏商品、入篮但未购买商的促销活动、提醒邮件等。
此外,还可以根据产品之间的关联,根据产品关联情况(看了又看,买了又买,可能喜欢等),进行产品推荐和套装,提高单个订单的销售额,增加销售机会。
案例分析
我们举个简单的案例,假设某购物网站发现近期很多会员活跃度不高,往往一次购买后就成了睡眠会员,那么如何唤醒这些会员呢,经过对会员行为分析,得知对商品的关注度不高,进而对商品页面进行调整优化,如图:
通过会员的行为分析,对网站页面优化,把会员关注的商品放在首要位置,并根据以前会员的购买记录、浏览行为等进行商品推荐,及时同送各种促销活动等,这样用户体验得到提升,进而形成二次消费。
综上,复购率的重要性是不言而喻的,提升复购率,不仅要从业务本身考虑,更要基于用户使用场景出发去考虑,不断完善产品功能,深刻理解复购率的价值,才能在正确的阶段做出复购率应用的正确决策。
99click让数据驱动用户和销量增长,更多信息,关注微信公众号cn99click,免费领取产品,体验 大数据 下的精准营销。
本文由 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/51695.html 。
数据分析
2018-05-07 18:06:00
作者 :不小平 来源 :不小数据(DataKnows)
“ 大数据杀熟 ”成为热点话题已经一段时间了,为大家科普原理和揭秘本质的文章也数不胜数。然而,相比起“ 大数据 杀熟”背后的策略和原理,我想大家可能更关心的是—— 我该怎么做,才能避免被“ 大数据 杀熟”。
首先还是简单介绍一下“大数据杀熟”的现象及其原理。 最常见的“大数据杀熟”现象: 某打车平台软件,同一时间同样起点和终点的行程的预估价格差异可以达到 20% 以上; 某网络订票平台,如果你高频搜索和持续关注,则搜索的机票价格持续上涨,订票后却又发现价格下跌;
概括地说,就是指, 通过大 数据分析 和预测的手段,对于同样的商品和服务,对不同对象收取不同价格的现象。
顾名思义,“大数据杀熟”——其技术基础是大数据,也就是海量的用户数据。
通过你的基础属性数据判断你的所在用户群体、人群特征(如消费能力),通过你的行为数据判断你的偏好和消费意愿强烈程度。
综合一系列的分析,判断出你是谁,你现在要做什么,愿意付出多少代价去做。然后通过精准的 用户画像 ,去对消费能力高、消费意愿强烈的用户展示更高的价格,赚取更多的利益。
已知了对方的招数,对策自然也不言而喻—— “反用户画像” 。
具体该怎么做呢,给大家提供以下几种思路和方案,大多数都是我进行过实操并且亲测有效的。大家也可以试试看。 思路一:画像伪装
1. 简单粗暴版
操作指南 :卸载重装 APP
亲测案例 :某打车 APP。卸载后再重装,车费相比卸载前(2 分钟前)便宜了 5 到 6 元。
背后原理 :伪装流失用户或新用户。
有运营相关经验的同学应该知道,运营的四大工作内容:拉新、留存、促活、转化。为了拉新对于新用户通常会给较大的优惠力度;对于已流失或即将流失的用户,平台通常会给予特殊的福利以召回和挽留。
而卸载这一行为对应的就是——用户流失。而重装后,有一定概率被认为是新下载用户。
因此通过卸载重装这一简单行为,你将会带着“召回的流失用户”或“新用户”标签被给予一些特殊的优待。
注: 一定概率的意思是指:对于非强制登陆的产品,生成用户标示的方式一般是 cookie id,卸载重装后会有新的 cookie id,则会被判定成新用户;而对于需要注册登录才能使用的产品,重装就可能就不太会起作用了,因为平台是以你的手机号记录你是谁以及你的数据的。 卸载重装不仅可以用于大数据杀熟,对于一些游戏也很适用,比如去年风靡一时的阴阳师,卸载一小段时间后再重装,基本几抽之内就能出 SSR。其实也是常见的游戏运营策略。
 2. 交叉验证版
操作指南 :多找几个朋友一起试试看
亲测案例 :朋友在旅行前两个月就在某订票平台上持续关注出行航班机票,关注许久发现票价一直在 6000 元以上居高不下,我听闻后立即帮忙搜索查询,搜索结果票价不到 4000,遂帮忙订票,省下 2000 元。
背后原理 :精细化运营下,同一策略同时命中多个人的概率是很低的。
因此多找几个朋友试试看,甚至可以用父母的手机(网络行为不活跃用户,数据较少)搜索对比,然后选择最低价的那个下单。
 3. 越薅越上瘾版
操作指南 :伪装价格敏感用户
亲测案例 :越是“无优惠券不下单”的用户,被派发的下单红包、优惠券的概率和优惠力度越大。
背后原理 :价格敏感用户是指下单意愿强弱度受价格高低、优惠力度影响极大的用户群体。在用户运营中,为了节省预算的同时最大化提升转化,平台会选择将补贴下发给最容易受补贴诱导而转化消费的用户。
因此,如果你能够被定义为价格敏感用户,那么你接收到优惠补贴的概率就会高出普通用户很多。 思路二:画像模糊
操作指南 :反向操作
案例举例 :当你要搜索 A 时,再伴随搜索一些不相关的 B、C、D,用无关数据掩盖你的真实意图数据。
背后原理 :用户画像的准确性来自于用户行为数据的收集和分析。违反自身实际意图地进行一些操作,留下错误标签,降低平台收集的数据的真实性和准确性,使用户画像匹配度降低。
然而需要注意的是,用户画像作为一柄双刃剑,它越了解你越能够为你提供贴心的服务,同时也越容易找到你的弱点伤害你。因此,当你的用户画像准确度降低时,你被伤害的可能性降低的同时带来的也是你享受的精细化个性化服务的质量可能会降低。
究竟选择哪一面,这是你的选择。 思路三:数据保护
操作指南 :关掉定位许可,关掉 Wi-Fi 自动连接,关掉 APP 数据需求许可
案例举例 :这里我想讲一个自己身上的反例。
3 月底的某一天我去国家会议中心参加了北京婚博会,晚上回到家打开微博和微信,发现信息流广告全部变成了婚纱照、婚庆公司、婚礼礼服等。令我感到恐怖的是在此之前我从未在手机进行过结婚相关的任何搜索,之前也没有出现过一条结婚相关的广告。这一切发生改变的原因仅仅是我本人去了婚博会这个地方而已。
背后原理 :公共 Wi-Fi 泄密或定位服务泄密。和同事探讨了这件事,分析后得出以上两种可能性。不管是哪种,原理都是通过网络获取你的物理位置(婚博会现场)后分析出你的所属人群(婚期将近)和需求(婚礼相关消费),然后进行信息流广告推送。
对此我们需要做的是,尽可能地不要让你的隐私数据(包括地理位置、通讯录、相册等)被获取。关闭掉一切非必须的定位许可、照片读取许可、通讯录读取许可,不要连接来路不明的 Wi-Fi 甚至一些看起来官方的 Wi-Fi。 写在最后
以上的这些思路和方案,目前来说应该还是可以有效一阵子的。基于这些思路,大家也可以想到更多的其他方案来应对“大数据杀熟”。
然而技术和方法总是在不停发展和进步的,如果不愿意做待宰的羔羊,我想我们能做的就是跟上它们的步伐,知其然,并知其所以然,然后找到破解之法。
范冰老师对于大数据杀熟使用一句名言打了个再恰当不过的比方:
「 所有命运赠送的礼物,都早已在暗中标注了价格 」。
当我们越来越多地享受数据带给我们的便利服务时,也应该尽早地考虑到我们将要为之付出的代价。
“大数据杀熟”所代表的动态定价也只是其中的冰山一角而已。
而在不远的未来,数据安全,其实就是你我的安全。
本文为专栏文章,来自:数据化管理,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/51673.html 。
数据分析
2018-05-06 21:07:00
作者 | Pedro Lopez 编译 | Sambodhi 编辑 | Natalie
AI 前线导读: 作为程序猿的你,是不是想让自己开发的应用程序也拥有 人工智能 呢?如果答案是 Yes,那么要怎么做呢?其实我们不用重复发明轮子,KDnuggets 已经为我们整理了 50 多个有用的 机器学习 和预测的 API,有了这些 API 的加持,就如虎添翼!是不是迫不及待了?走,让我们来看看。
本文精选了包括人脸和图像识别、文本分析、自然语言处理、文本情感分析、语言翻译、机器学习和预测等多个领域共 58 个实用 API。
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。本文是 KDnuggets 整理的 API 列表第三版,我们从 2017 年的列表(https://www.kdnuggets.com/2017/02/machine-learning-data-science-apis-updated.html )中删除了停用的 API,并将其更新为新的 API。所有的 API 被分为新兴的几大类应用: 人脸和图像识别。 文本分析、自然语言处理、文本情感分析。 语言翻译。 机器学习和预测。
在每组应用程序中,列表按字母顺序排列。API 简介基于截止到 2018 年 4 月 16 日其网站上的信息。读者可去 API 官网查看其相关信息。
人脸和图像识别
1 Animetrics Face Recognition
官网:http://api.animetrics.com/
该 API 可用于检测图片中的人脸并将其与一组已知的人脸进行匹配。该 API 还可添加或删除可搜索的图库中的主题,并添加或删除主题中的人脸。
2 Betaface
官网:https://www.betaface.com/wpa/
人脸识别 和检测的 Web 服务。其特点包括多个人脸检测、人脸裁剪、123 个人脸特征点检测(22 个基本点、101 个高级点)、大型数据库中的人脸验证、识别、相似搜索等。
3 Eyedea Recognition
官网:http://www.eyedea.cz/
专注于高端计算机视觉解决方案,主要用于目标检测和目标识别软件。提供眼睛、脸部、车辆、版权和车牌检测的识别服务。API 的主要价值在于可即时了解目标、用户和行为。
4 Face++
官网:https://www.faceplusplus.com/
面部识别和检测服务,为应用程序提供检测、识别和分析。用户可以通过调用该 API 来训练程序、检测人脸、识别人脸、分组人脸、操作人脸和创建人脸集合,创建群组和获取信息。
5 FaceMark
官网:http://apicloud.me/apis/facemark/docs/
一种能够在正面人脸照片上检测 68 个点,以及 35 张个人头像照片的 API。
6 FaceRect
官网:http://apicloud.me/apis/facerect/demo/
功能强大、完全免费的人脸检测 API。该 API 可在一张照片查找人脸(正面和侧面)或多张人脸,为每张检测到的人脸生成 JSON 输出。此外,FaceRect 可谓每个检测到的人脸(眼睛、鼻子和嘴巴)找到人脸特征。
7 Google Cloud Vision API
官网:https://cloud.google.com/vision/
由 TensorFlow 等平台提供支持,使模型能够学习和预测图像的内容。它可以帮助你找到自己喜欢的图像,并快速大规模地获取丰富的注释。它将图像分为数千个类别(例如“船只”、“狮子”、“埃菲尔铁塔”),以相关情绪进行人脸识别,并识别出多种语言打印的单词。
8 IBM Watson Visual Recognition
官网:https://www.ibm.com/watson/developercloud/visual-recognition.html
理解图像的内容:视觉概念标记图像,查找人脸并估算年龄和性别,并在集合中查找类似的图像。你还可以通过创建自己的自定义概念来训练服务。
9 Imagga
官网:https://imagga.com/solutions/auto-tagging.html
提供可自动图像分配标签的 API,使你的图像更容易找到。它基于图像识别平台即服务(image recognition Platform-as-a-Service)。
10 Kairos
官网:https://www.kairos.com/docs/api/
一个可快速将情绪分析和人脸识别添加到自己的应用和服务中的平台。
11 Microsoft Cognitive Service – Computer Vision
官网:https://www.microsoft.com/cognitive-services/en-us/computer-vision-api
基于云的 API,可根据输入和用户的选择,以不同的方式分析视觉内容。例如,基于内容标记图像;对图像进行分类;检测人脸并返回其坐标;识别特定域的内容;生成内容的描述;识别图像中发现的文本;标记成人内容。
12 Skybiometry Face Detection and Recognition
官网:https://skybiometry.com/Documentation/
提供人脸检测和识别服务。新版本的 API 能够区分墨镜和透明眼镜。
文本分析,自然语言处理,文本情感分析
1 Bitext
官网:https://www.bitext.com/text-analysis-api-2/#How-accurate-is-the-analysis
提供市场上最准确的基于情感的多语言话题。目前,有四种语义服务可用:实体和概念提取、情感分析和文本分类。该 API 可支持 8 种语言。
2 Diffbot Analyze
官网:https://www.diffbot.com/dev/docs/analyze/
为开发人员提供能够识别、分析和提取任何 Web 页面的主要内容和部分内容的工具。
3 Free Natural Language Processing Service
官网:https://market.mashape.com/loudelement/free-natural-language-processing-service
一项免费服务,包括情感分析、内容提取和语言检测。这是大型云 API 市场 mashape.com 上流行的数据 API。
4 Google Cloud Natural Language API
官网:https://cloud.google.com/natural-language/reference/rest/
分析文本的结构和含义,包括情感分析、实体识别和文本注释。
5 Watson Natural Language Understanding
官网:https://www.ibm.com/watson/services/natural-language-understanding/
分析文本从内容提取元数据,例如概念、实体、关键词、类别、关系和语义角色等。
6 MeaningCloud Text Classification
官网:https://www.meaningcloud.com/developer/text-classification
API 执行预分类任务,如:提取文本、标记化、停用词删除和同一词类化(lemmatisation)。
7 Microsoft Cognitive Service – Text Analytics
官网:https://www.microsoft.com/cognitive-services/en-us/text-analytics-api
从文本中检测情感、关键短语、主题和语言。与此 API 相同的其他 API(用于语言的认知服务)包括 Bing 拼写检查、语言理解、语言分析、网络语言模型。
8 nlpTools
官网:http://nlptools.atrilla.net/web/api.php
一种简单的 JSON,通过 HTTP RESTful Web 服务进行自然语言处理。它解码了在线新闻媒体的情感分析和文本分类。
9 Geneea
官网:https://api.geneea.com/
可以对提供的原始文本,从给定 URL 中提取的文本或直接提供的文档执行 (自然语言处理)。
10 Thomson Reuters Open Calais™
官网:http://www.opencalais.com/opencalais-api/
使用自然语言处理、机器学习和其他方法,Calais 将文档与实体(人员、地点、组织等)进行分类和链接:事实(人员“x”为公司“y”工作)和事件(人员“z”于日期“x”被任命为公司“y”董事长)。
11 Yactraq speech 2topicsis
官网:http://yactraq.com/
一种云服务,它通过语音识别和自然语言处理将音频视频内容转换成主题元数据。
语言翻译
1 Google Cloud Translation
官网:https://cloud.google.com/translate/docs/
可以动态翻译数千种语言对的文本。该 API 允许网站和程序以编程方式与翻译服务集成。
2 Google Cloud SPEECH-TO-TEXT
官网:https://cloud.google.com/speech-to-text/
允许开发人员在易于使用的 API 中应用强大的神经网络模型将音频转换为文本。该 API 可识别 120 种语言和语言变体,以支持你的全球用户基础。
3 IBM Watson Language Translator
官网:http://www.ibm.com/watson/developercloud/language-translator.html
将文本从一种语言翻译成另一种语言。该服务提供了多个领域特定的模型,你可以根据自己独特的术语和语言进行自定义。例如,客户可以用他们自己的语言进行交流。
4 MotaWord
官网:https://www.motaword.com/developer
一个快速的人工翻译平台。它提供了超过 70 种语言的翻译。该 API 还可以让开发人员为每个翻译获得报价,提交翻译项目以及文档和风格指南,跟踪翻译项目的进度并实时获取活动源。
5 WritePath Translation
官网:https://www.writepath.co/en/developers
该 API 允许开发人员访问并集成 WritePath 和其他应用程序的功能。可以使用此 API 进行操作:检索单词计数、发布翻译文档和检索已翻译的文档和文本。
6 Houndify
官网:https://www.houndify.com/
通过一个始终在学习的独立平台,将语音和会话智能集成到您的产品中。
7 IBM Watson Conversation
官网:https://www.ibm.com/watson/developercloud/conversation.html
构建能够理解自然语言的聊天机器人,并将它们部署在任何设备上的消息传递平台和网站上。与该 API 相同的其他 API(语言的认知服务)包括对话框、自然语言分类器、个性观点、文档转换和音调分析仪。
8 IBM Watson Speech
官网:https://www.ibm.com/watson/developercloud/speech-to-text.html
包括语音到文本和文本到语音(例如,在呼叫中心转录通话,或创建语音控制的应用程序)。
机器学习和预测
1 Amazon Machine Learning
官网:https://aws.amazon.com/documentation/machine-learning/
在数据中查找模式。该 API 的示例用途是用于欺诈检测、预测需求、目标营销和点击预测的应用程序。
2 BigML
官网:https://bigml.com/api/
为云托管的机器学习和 数据分析 提供服务。用户可设置数据源并创建一个模型,通过标准 HTTP 使用基本的监督和无监督机器学习任务进行预测。
3 Google Cloud Prediction
官网:https://cloud.google.com/prediction/docs/
提供一个 RESTful API 来构建机器学习模型。这些工具可以帮助分析你的数据,为你的应用程序添加各种功能,比如客户情感分析、垃圾邮件检测、推荐系统等等。
4 co
官网:http://www.guesswork.co/
为电子商务网站提供产品推荐引擎。Guesswork 网站使用在 Google Prediction API 上的语义规则引擎准确预测客户的意图。
5 Hu:toma
官网:https://www.hutoma.ai/
通过提供免费访问转悠平台,帮助世界各地的开发人员构建并实现深度学习的聊天机器人,从而提供创建和分享对话式 人工智能 的工具和渠道。
6 IBM Watson Retrieve and Rank
官网:http://www.ibm.com/watson/developercloud/retrieve-rank.html
开发人员可以将他们的数据加载到服务中,使用已知的相关结果来训练机器学习模型(Rank)。服务输出包括相关文档和元数据的列表。例如,呼叫中心座席也可以快速找到答案来改善平均呼叫处理时间。
7 indico
官网:https://indico.io/docs
提供文本分析 (如情感分析、Twitter 接洽、情感) 和图像分析 (如面部表情、面部定位)。该 indico API 是免费使用的,不需要训练数据。
8 Microsoft Azure Cognitive Service
官网:https://azure.microsoft.com/en-au/services/cognitive-services/
正在取代提供基于预测分析的解决方案的 Azure 机器学习建议服务。它为客户提供个性化的产品推荐并提高销售。新版本具有新的功能,如批处理支持、更好的 API Explorer、更干净的 API 外观、更一致的注册 / 账单体验等等。
9 Microsoft Azure Anomaly Detection API
官网:https://gallery.cortanaintelligence.com/MachineLearningAPI/Anomaly-Detection-2
在时间序列数据中以一致的时间间隔来检测异常。例如,在计算上升趋势的内存使用时,可能会引起注意,因为它可能表明内存泄漏。
10 Microsoft Cognitive Service – QnA Maker
官网:https://www.microsoft.com/cognitive-services/en-us/qnamaker
将信息提炼为对话式,易于浏览的答案。与此 API 在同一组(知识认知服务)中的其他 API 包括学术知识、实体链接、知识探索和建议。
11 Microsoft Cognitive Service – Speaker Recognition
官网:https://www.microsoft.com/cognitive-services/en-us/speaker-recognition-api
让你的应用能够知道谁在说话。与此 API 相同的组(语音识别服务)中的其他 API 包括 Bing Speech(将语音转换为文本并理解其意图)和 Custom Recognition。
12 MLJAR
官网:https://mljar.com/
为原型设计、开发和部署模式识别算法提供服务。
13 NuPIC
官网:https://github.com/numenta/nupic/wiki/NuPIC-API—A-bird’s-eye-view
一个用 Python/c++ 编写的开源项目,它实现了 Numenta 的皮层学习算法(Cortical Learning Algorithm),并由 NuPIC 社区维护。该 API 允许开发人员使用原始算法,将多个区域 (包括层次结构) 串联起来,并利用其他平台功能。
14 PredicSis
官网:https://predicsis.ai/
为 大数据 提供强大的洞察力,并通过预测分析提高营销业绩。
15 PredictionIO
官网:http://predictionio.incubator.apache.org/index.html
基于 Apache 2.0 许可的 Apache Spark、HBase 和 Spray 构建的开源机器学习服务器。示例 API 方法包括创建和管理用户和用户记录、检索项目和内容以及基于用户创建和管理建议。
16 RxNLP – Cluster Sentences and Short Texts
官网:http://www.rxnlp.com/api-reference/cluster-sentences-api-reference/
文本挖掘和自然语言处理服务。他们的 API 之一,Cluster Sentences API,可以将句子(例如来自多篇新闻文章的句子)或短文本(比如 Twitter 或 Facebook 状态更新的文章)组合成逻辑组。
17 Recombee
官网:https://www.recombee.com/
提供一种通过 RESTful API 使用 数据挖掘 、查询语言和机器学习算法(例如,协同过滤和基于内容的推荐)的服务。
阅读原文:
https://www.kdnuggets.com/2018/05/50-useful-machine-learning-prediction-apis-2018-edition.html
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/51668.html 。
数据分析
2018-05-06 12:22:01
简介
近年来,随机森林模型在界内的关注度与受欢迎程度有着显著的提升,这多半归功于它可以快速地被应用到几乎任何的数据科学问题中去,从而使人们能够高效快捷地获得第一组基准测试结果。在各种各样的问题中,随机森林一次又一次地展示出令人难以置信的强大,而与此同时它又是如此的方便实用。
需要大家注意的是,在上文中特别提到的是第一组测试结果,而非所有的结果,这是因为随机森林方法固然也有自己的局限性。在这篇文章中,我们将向你介绍运用随机森林构建预测模型时最令人感兴趣的几个方面。
随机森林的发展史
谈及随机森林算法的产生与发展,我们必须回溯到20世纪80年代。可以说,该算法是Leo Breiman, Adele Cutler, Ho Tin Kam, Dietterich, Amit和Geman这几位大师呕心沥血的共同结晶,他们中的每个人都对随机森林算法的早期发展作出了重要的贡献。Leo Breiman和 Adele Cutler最早提出了执行随机森里的关键算法,这一算法也成为了他们的专利之一。Amit, Gemen和Ho Tim Kam各自独立地介绍了特征随即选择的思想,并且运用了Breiman的“套袋”思想构建了控制方差的决策树集合。在此之后,Deitterich在模型中引入了随即节点优化的思想,对随机森里进行了进一步完善。
Leo Breiman
什么是随机森林?
随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤,并取得了不错的成效。另外,它还担任了集成学习中的重要方法,在将几个低效模型整合为一个高效模型时大显身手。
在随机森林中,我们将生成很多的决策树,并不像在CART模型里一样只生成唯一的树。当在基于某些属性对一个新的对象进行分类判别时,随机森林中的每一棵树都会给出自己的分类选择,并由此进行“投票”,森林整体的输出结果将会是票数最多的分类选项;而在回归问题中,随机森林的输出将会是所有决策树输出的平均值。
随机森林在 Python 和R中的实现
随机森林在R packages和Python scikit-learn中的实现是当下非常流行的,下列是在R和Python中载入随机森林模型的具体代码:
Python
#Import Library
fromsklearn.ensemble import RandomForestClassifier #use RandomForestRegressor for regression problem
#Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset
# Create Random Forest object
model= RandomForestClassifier(n_estimators=1000)
# Train the model using the training sets and check score
model.fit(X, y)
#Predict Output
predicted= model.predict(x_test)
RCode
library(randomForest)
x<- cbind(x_train,y_train)
# Fitting model
fit<- randomForest(Species ~ ., x,ntree=500)
summary(fit)
#Predict Output
predicted= predict(fit,x_test)
好了,现在我们已经了解了运行随机森林算法的代码,接下来让我们看看这个算法本身的运作方式是什么样的吧!
随机森林算法是如何工作的?
在随机森林中,每一个决策树“种植”和“生长”的规则如下所示:
1.假设我们设定训练集中的样本个数为N,然后通过有重置的重复多次抽样来获得这N个样本,这样的抽样结果将作为我们生成决策树的训练集;
2.如果有M个输入变量,每个节点都将随机选择m(m3.每棵决策树都最大可能地进行生长而不进行剪枝;
4.通过对所有的决策树进行加总来预测新的数据(在分类时采用多数投票,在回归时采用平均)。
随机森林的优点与缺点
优点:
1.正如上文所述,随机森林算法能解决分类与回归两种类型的问题,并在这两个方面都有相当好的估计表现;
2.随机森林对于高维数据集的处理能力令人兴奋,它可以处理成千上万的输入变量,并确定最重要的变量,因此被认为是一个不错的降维方法。此外,该模型能够输出变量的重要性程度,这是一个非常便利的功能。下图展示了随机森林对于变量重要性程度的输出形式:
3.在对缺失数据进行估计时,随机森林是一个十分有效的方法。就算存在大量的数据缺失,随机森林也能较好地保持精确性;
4.当存在分类不平衡的情况时,随机森林能够提供平衡数据集误差的有效方法;
5.模型的上述性能可以被扩展运用到未标记的数据集中,用于引导无监督聚类、数据透视和异常检测;
6.随机森林算法中包含了对输入数据的重复自抽样过程,即所谓的bootstrap抽样。这样一来,数据集中大约三分之一将没有用于模型的训练而是用于测试,这样的数据被称为out of bag samples,通过这些样本估计的误差被称为out of bag error。研究表明,这种out of bag方法的与测试集规模同训练集一致的估计方法有着相同的精确程度,因此在随机森林中我们无需再对测试集进行另外的设置。
缺点:
1.随机森林在解决回归问题时并没有像它在分类中表现的那么好,这是因为它并不能给出一个连续型的输出。当进行回归时,随机森林不能够作出超越训练集数据范围的预测,这可能导致在对某些还有特定噪声的数据进行建模时出现过度拟合。
2.对于许多统计建模者来说,随机森林给人的感觉像是一个黑盒子——你几乎无法控制模型内部的运行,只能在不同的参数和随机种子之间进行尝试。
调整随机森林模型中的参数
到目前为止,我们已经对整个随机森林模型进行了基本的了解,与此同时,对于模型中各种参数的调整与修改也十分重要,下列为python scikit-learn中随机森林模型的语法:
class sklearn.ensemble.RandomForestClassifier( n_estimators=10 , criterion=’gini’ , max_depth=None , min_samples_split=2 , min_samples_leaf=1 , min_weight_fraction_leaf=0.0 , max_features=’auto’ , max_leaf_nodes=None , bootstrap=True , oob_score=False , n_jobs=1 , random_state=None , verbose=0 , warm_start=False , class_weight=None )
具体的参数说明这里不再赘述,大家可以到scikit-learn.org的3.2.4.3.1章节进行查看。
这些参数在调节随机森林模型的准确性方面起着至关重要的作用。科学地使用这些指标,将能显著的提高模型工作效率。
结束语
在本文中,我们介绍了最常用的机器学习算法之一——随机森林,并对它的优缺点以及参数调整进行了说明,我们非常推荐大家在日常分析中使用随机森林,并通过参数调整进一步了解这个模型的分析能力。
原文作者:SUNIL RAY
翻译:SDCry!!!
原文链接:http://www.analyticsvidhya.com/blog/2015/09/random-forest-algorithm-multiple-challenges/
本文为专栏文章,来自:数据工匠,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/7101.html 。
数据分析
2016-01-24 10:32:00
问题
根据所得到的回归模型预测新的值。
解决方案
将要用于预测的数据保存到数据框中。用predict函数,将newdata参数设为这个数据框: > m < - lm ( y ~ u + v + w ) > preds < - data.frame ( u = 3.1, v = 4.0, w = 5.5) > predict(m, newdata=preds)
讨论
有了线性模型,就可以很方便地做预测,predict函数会搞定所有的麻烦。唯一的麻烦就是要把你的数据整到数据框中去。
predict函数会返回一个预测值的向量,数据中每一行都会有一个相应的预测值。 解决方案中的例子只有一行,所以只有一个返回值: > preds < - data.frame ( u = 3.1, v = 4.0, w = 5.5) > predict(m, newdata=preds) 1 12.31374
如果预测数据有多行,就会为没一行数据返回一个预测值: > preds <- data.frame( + u=c(3.0, 3.1, 3.2, 3.3), + v=c(3.9, 4.0, 4.1, 4.2), + w=c(5.3, 5.5, 5.7, 5.9) ) > predict(m, newdata=preds) 1 2 3 4 11.97277 12.31374 12.65472 12.99569
在这里要说明一下,新的数据中不需要有响应变量,只要有预测变量即可。因为响应变量正是你要计算的值,所以并不是输入数据中所必须的。
扩展阅读
这里的预测只是点估计。用predict的interval=”prediction”参数可以得到置信区间。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-01-19 14:53:03
一个多月前, 微软 与 亚马逊 打通了它们的语音助理。而今天,两家公司又宣布联手推出全新“ Gluon ” 深度学习 库,以便开发者们轻松搭建先进的机器学习模型。
Gluon 接口将为开发者们提供一个 Python API 和预先构建的神经网络组件,让他们可以更加流畅地调试和更新。当前,该深度学习库仅支持 Apache MXNet 。不过微软表示,它将很快支持该公司的认知工具包(CNTK)。

构造一个神经网络的难题,在于保持模型构建和训练性能之间的平衡。以 Apache MXNet 深度学习引擎为例: 从开发者的角度来看,微软认知工具包(Microsoft Cognitive Toolkit)和 Google TensorFlow 确实可以在一定程度上优化训练的过程,但通常需要大量的时间和复杂的编码。
而 Gluon,则为开发者们提供了针对各种神经网络模型的试验接口,以及对底层性能几乎没有任何影响的训练方法。
微软 人工智能 研究执行副总裁 Eric Boyd 相信,Gluon Interface 可以给开发者们“相当自由的选择”。至于它能对整个机器学习社区发挥多大的影响力,仍有待时间去检验。
Gluon 传送门: http://github.com/gluon-api/gluon-api/
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2017-10-16 11:01:00
在 大数据 大行其道的年代,几乎所有人淹没在数据的海洋里。马丁克鲁贝克(Martin Klubeck)对数据追逐和草率跟风提出了忠告和建议,认为数据不过是冰山一角,对于IT企业来说,真正需要的,其实是“shine a light on data”。量化(Metrics),为IT企业利用数据提升业绩提供了绝佳的机会。
量化管理,是指以数字为基础,用数学的方法来考察和研究事物的运动状态和性能,以求对事物存在和发展的规模、程度等做出精确的数字描述和科学控制,实行标准化操作的管理模式。
哈佛量化社会科学研究所主任Gary King说:“我们的确正在起航。不过,在庞大的新数据来源的支持下,量化的前进步伐将会踏遍学术、商业和政府领域。没有一个领域不被触及。”
量化分析作为强大的改进工具,其价值根源来自于它天生就具备的沟通促进能力。它能激发客户和服务提供者之间的对话、员工和管理者之间的对话,这些对话应该围绕改善机会和数据异常展开。对话的基础应该是量化分析所提供的调研、分析和对指示器的解释。
量化分析结果应该是调研、讨论的催化剂,之后才是行动。对量化分析结果唯一正确的反应就是展开调研。
事实并非真相
如果在网上搜索我们所了解的那些真相(当然要有数据支持),会发现很多网站上都有“揭穿”过去以及现在那些神话的证据。公认的事实最终却被证明为是对理论的不当应用或对数据的误读。
较早前有个健康信息的例子,过去人们深信不疑的真理却与现在的认知完全相反。十年前觉得挺健康的食品现在却发现根本不是,或者以前觉得不好的食品现在却被认为非常健康。鸡蛋有没有好处?这既和食用者有关,也和时间有关。 美国政府的“食品金字塔”会定期调整。 谁还记得洛奇(Rocky)把生鸡蛋灌进自己嘴里的场景? 看起来我们每年都要遵守一个新的“饮食规定”——高蛋白,高胆固醇,低脂肪,白肉,或者鱼……过段时间就会有争论。
我们经常从过去的事实中发现新的真相,关于这种现象,有个说法很好:事实不会改变,改变的只是我们对事实的解释。
下面快速浏览一下这个可能不是真相的事实吧。
这是关于亚马逊书籍销售排行榜的。迈克·兰索恩,我们曾经一起写过一本书,他喜欢在亚马逊上看销售评级。他对这个数据非常着迷,心情会随着数值变化而改变。可问题是评级每天都在变化,不止和书的销量有关,还和其他书籍的销量相关,而且这个销量仅仅统计买家下单的数量。如果一个订单买了1000本,亚马逊只会在评级上加1。可如果分1000次下单,那统计销量就加1000,对评级的影响非常大。亚马逊也不关心是谁买的书。我自己去买也会提升评级,不考虑我是不是带着偏见购买的。
太简单了。尽管数据是“准确的”(或者至少你可以肯定它们是准确的),但对数据的解释可能会有问题。迈克应该因为书的日益普及而预计书会大卖,所以去买个新电视吗?如果评级急剧下降,他应该因为购者寥寥而抑郁吗?
对于这两个问题,答案很明显都是否定的。
这个量化结果明显被误作为事实了,实际上它只向受众传达了部分信息。 拿到量化分析结果的第一个恰当的反应就是展开调研。
量化分析结果不是事实,这在前面已经说过了。如果把它们当成事实,那就太高看它们了。如果领导层决定用量化“驱动”决策,那很危险。这超出了量化分析的能力范围,把量化分析结果视同真相是浮于表面。做出的决策和行动也会因为信息不是100%准确而蕴含风险。 量化分析结果不是事实,只是指示器。
如果把量化分析推上神坛(给指示器披上真相的外衣),就是在鼓励舍本逐末,鼓励“追逐数据”,而不是基于根本问题设计能找出答案的量化分析体系。这也向员工发送了一个完全错误却清晰无比的信号,量化结果最重要。最终就会变成试图用数字、百分比、图形和图表去操控员工的行为。
最简单的例子是客户满意度调查,即便是在焦点小组访谈中直接得到的反馈,采用时也要持怀疑态度。哪怕看到的是真正客观的数据,也有可能解释错误。客观评测工具产生的数据也可能因为软件缺陷而存在错误。
大多数时候,优秀的管理者(也包括好员工和好顾客)不依靠数据就能了解真相。如果数据与直觉不符,或者数据太合胃口,都应该进行调研。
用我推荐的方法构建量化分析体系,最大的好处是它能用完整的故事回答根本问题。如果量化分析体系搭建得好,那它可能准确而又全面,最接近事实真相。但是,照我以往的经验,不管如何努力,也不可能彻底消除错误和误解的生存空间。稍稍驻足审视一番没坏处,还可能非常有帮助。
量化分析也会犯错
因为任何数据采集方法都可能存在变数和错误,所以任何指标的整体有效性都值得怀疑。如果对信息所传达的内容不加辨别地全盘接受,那可能不定什么时候就被引入歧途。假设你车里的引擎检查灯亮了,恰好又是一辆新车。即使知道它是个故障指示器,也不应该急着下结论。去4S店检查引擎检查灯的时候,我最喜欢听到的就是检修师傅说唯一的问题就是引擎检查灯的问题。
你可能觉得用油量指示器举例更好。如果油表的指针接近空值,警示灯也亮了,你会觉得该加油了。但油表仅仅是指示器而已。它可能比引擎检查灯可靠,但也只是更可靠的指示器而已。除了各种因素外(我发现在山上的时候,本来快要归零的油表会指示油箱里还有八分之一的油),油表还可能被卡住,或者干脆坏掉。
我能理解你对油表、温度计或者电子表这些个别指标的信任。但看到量化分析报告时,里面充满了各种数据、指标和信息,我希望你能以适度谦卑的心态看待自己解读量化分析报告的能力。
这种适度谦卑让我们不急着下结论,也不会仅仅根据指示器(量化分析报告)做出决定。
量化分析是工具,是一个指示器,它并不是答案,而且可能会有多种解释。
我听人说过(太多次了)量化分析应该“驱动”决策。但我的态度和信念更倾向于量化分析应该为决策“注入活力”。
无论如何粉饰,量化分析结果也仅仅是指示器,所以第一反应只能是调研。
当然,有些量化指标非常简单,可以不经调查就接受(比如车上的油表),但即使是这种情况,也应该保持警惕,时刻提防被数据误导或得到错误数据。
最后,即便对数据(比如前面的运动统计数据)的准确性有百分百的把握,还是必须把它当成指示器。数据不能预测未来,如果可以,还踢什么比赛啊。
量化分析结果不应被看做事实,它只能表明当前和过去的状况。如果使用得当,量化分析应该能引导会话,帮我们集中注意力,走向正确的方向。量化分析不提供答案,它帮我们提出正确的问题,采取正确的行动。
指示器:定性数据与定量数据
定性数据与定量数据的区别在于,定性数据是由观点和意见组成的,定量数据是由客观数字组成的。人们可能更容易将定性数据看做指示器,而定量数据会不经任何必要的深入调研就被误认为事实。下面来看下这两大类指示器。
定性数据
客户满意度是观点——一个表示客户满意程度的定性指标。大多数定性数据采集工具都是由调查和访谈组成的。它们可能有开放式问题、多选题或评级。只要不涉及“数字”,观察也可能是定性的,而观察棒球比赛中的击球次数或与产品线相关的数字问题等则不是。当通过观察获得观察者的观点时,得到的是定性数据。
根本问题经常要用定性数据来解答。客户满意度就是这样,类似情况还有以下几种。 员工满意度如何? 顾客更喜欢哪种产品,正规的还是精简的? 最快什么时候要? 顾客肯掏多少钱购买产品或服务? 顾客希望产品或服务可以在什么时候或者几点到几点得到? 员工觉得领导欣赏自己吗?
不管采集方式如何,这些数据都是主观数据,不可能变成客观数据,甚至大多数都不能用数字表示。定性数据可以用更量化的形式表示,比如将观点转换成李克特量表值。但它们仍然是观点,尽管看起来像定量数据,但它们不是。
某些分析师,特别是某些认为客户就是上帝的分析师,认为定性数据是最好的数据。这些分析师相信通过开放式问题可以得到非常有价值的反馈,能充分了解业务流程、产品和服务。既然客户就是上帝,还有什么分析方法能比得到客户对产品和服务的观点更好的呢?
这些分析师喜欢组织专题小组和访谈。调查用来应急足够,但没办法通过调查得到非文字信息,也看不出其他迹象,而这些对于找出问题(“客户满意度怎么样?”)的答案都很有价值。
最近几年有本组织发展的书非常流行,马库斯·白金汉(Marcus Buckingham)和柯特·科夫曼(Curt Coffman)写的《首先,打破一切常规》(First, Break All the Rules)(Simon & Schuster,1999)。这本书是基于作者对定性数据的分析写的。它在评论中向读者承诺可以“看透”成功的管理者和成功公司领导的“思想”。本书取得了极大成功,由此可见现今社会对定性指标的重视程度。
定量数据
定量数据通常就是指数字——不带感情色彩的客观指标。汽车上的所有仪表盘都是,还有从自动化系统采集的信息,比如自动应答器中记录的应答次数、呼叫等待时间、呼叫占用时间等。
经常会有人争论,说这种形式的数据比那种好。之所以说定量数据更好是因为它不受感情色彩影响,能够避免前后矛盾,但并不能说明定量数据就比定性数据好。定量阵营的兄弟们可能会说,人们给产品满意度的评级会受很多因素影响,而不是单纯地考察产品质量。在对服务或产品进行定性评估时需要考虑的因素包括: 提问的时间,上午、下午、晚上…… 提问之前受访者的情绪如何 受访者对相似产品或服务的既往经验 房间的温度 光线 提问者的个人魅力 访谈者是否有外地口音
这个列表还能继续。定量数据不需要考虑这么多变化因素,可以直奔主题,得到具体数值。同样情景的例子可能包括以下几种。 购买产品的顾客数量 同一顾客购买产品的次数 顾客购买产品支付的金额 顾客购买的其他产品 被退回的产品数量
定量信息的支持者会说这些数据更可靠,所以更有意义。
我相信你肯定猜出来了,哪个阵营都不完全正确。我建议同时采用这两类数据。
定性数据与定量数据
大多数情况下,定性数据的缺陷可以通过引入一些定量数据来弥补,反之亦然。单独考虑定性数据,很难让人信服,因为信息的影响因素太多了。如果有个顾客说喜欢你的产品或服务,但从来没买过,这些暖心窝子的正面反馈对公司的业务发展起不到什么作用,而销售量和重复购买率这样的定量数据可以支撑这些定性反馈。
如果只看定量数据,所做的决定可能也会很不明智。比如测试产品的全部库存在一天内售罄,那我们可能就会认为这个产品很火,自然希望能卖得更多。如果没有得到定性数据的支持就做出这个假设,可能就会投入大笔资金开始大规模生产。定性问题能搞清楚该产品迅速卖完的原因。可能马上就会发现这种成功不可能再现了,因此在开足马力生产之前需要做更多的研发工作。比如有个迷迷糊糊的顾客被派来买大量的某种产品,但却阴错阳差地选了测试产品。还有可能大多数顾客购买它是因为产品外观新颖,但当问及使用感受时,他们都保证肯定不会再买这种东西了,即他们发现自己不喜欢这个产品。
不仅应该同时使用两种数据(当然也包括两种数据采集方式),而且每种数据都应该采集多份。采集完之后也要对结果进行调查。
你可能觉得定性指标能更明白地表明状况。在问一位顾客对产品是否满意时,即便她非常肯定地回答“是的”,也不能断定她真的非常满意,从她的回答中唯一可以肯定的“事实”是:她说她满意。
即便是自动应答软件采集的数据,也仅仅是指示器。
定量数据,虽然客观,也仍然仅仅是指示器。如果不知道数值出现的原因,那就只能猜。猜原因,就是在猜答案。 量化分析结果(指示器)需要解释得当。
对于任何根本问题,都鼓励使用三角交叉法来提高答案的完整性和可读性。这样就不会单独使用定性数据或定量数据。完全没必要争论哪个好,两种都应该来一点。
记住下面的原则: 量化分析结果仅仅是指示器。 量化分析结果不是事实。无论对准确性多有信心,都不要把它上升到真相的高度。 面对量化分析结果,唯一正确的做法就是展开调查。 通过增加文字叙述进行描述,是在解释量化分析结果表明了什么,就可以更好地决策,找出改善机会,或确定优化过程。 指标分为两大类:定性指标与定量指标。定性指标本质上是主观的,并且通常表明了某种观点。定量指标本质上是客观的,并且是由自动化的、公平的工具产生的。 量化分析本身不提供答案,它帮我们提出正确的问题,让我们采取正确的行动。 量化分析结果要经过解释才能发挥作用。 观众对解释还会进行解释,因此,量化分析结果不能给出真相,它们只能提供洞察力。
结论
量化分析结果仅仅是指示器,这不是说它们没有根据或不准确。即便是最客观、准确和有确实根据的量化分析结果也应该仅仅当做指示器对待。从加入空军开始,我就知道“认知即现实”。量化分析也是如此。我之所以坚持要给所有的图形、图表和表格配上文字说明,就是想限制观众在理解量化分析时自由发挥。量化分析结果的解释权不应该交给观众,这应该是你的工作,要尽职尽责地调研量化分析结果所表明的内容。应该依据对数据的调研结果,经过深思熟虑得出结论,然后把这些内容放在量化分析结果的解释中。
然后要竭尽全力地向受众兜售你对量化分析的解释。即便如此,也必须明白你的解释会被看客们再次解释。必须接受精心定义的完整描述最终也只是个指示器。它应该是精心解释过的指示器,每个特征都配以正确的解读。但它仅仅是指示器,所以要适度谦卑。
记住,量化分析仅仅是个工具。不要期望过高。
关于作者
马丁·克鲁贝克(Martin Klubeck) 圣母大学的一位战略规划顾问,实用量化分析领域的知名专家。拥有韦伯斯特大学人力资源发展硕士学位和查普曼大学的计算机科学学士学位。他是《组织改进为什 么事倍功半》的合著者,在量化分析方面也发表了很多文章。怀着把复杂的问题变简单的热情,他研发出了一套简单的系统,用来开发有意义的量化分析体系。另外,他还是信息技术绩效标准构建联盟的奠基人,这个非盈利组织专注于提供业界亟需的指标标准。 本文节选自《量化: 大数据时代 的企业管理》一书。Martin Klubeck著,吴海星译,由人民邮电出版社出版发行。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2013-10-04 09:45:00
作者  Talia Borodin 编译  Mika
当我在15年前开始从事数据工作时,我从未想过近年来 数据科学家 会如此备受追捧。如今, 数据科学家被认为是全球最热门的职位之一 ,市场上对数据科学家的需求供不应求。创业公司在产品生命周期的早期招聘数据科学家的情况并不罕见。其实很多情况下,他们并不需要数据科学家。
作为一名数据科学方面的倡导者,为什么我会这么认为呢
首先,我想声明的是雇用数据科学家确实有很多好处。 如果使用得当, 数据科学家将成为强大的商业武器 。我想强调的是,数据科学当中涉及到大量的数据相关操作和技巧,这不是在短期培训中就能掌握的。
因此,当企业需要聘请数据科学家时,需要慎重考虑应该何时聘请哪种数据科学家。
当企业打算聘请数据科学家之前,可以先试着问自己以下四个问题:
1. 有多少数据?
如果你是一家尚未启动的创业公司,那么你们可能并不需要全职数据科学家。其实,如果你的公司已经发展的较为成熟,但只有小规模的客户、产品或会员基础,那么你也不需要数据科学家。
为什么呢? 显然数据科学家需要数据。 不是任何数据都可以。许多技术需要至少数万个、甚至数百万个数据点才能构建。
如今,深度学习备受关注。在针对数据科学家的工作描述中充满了神经网络、计算机视觉和 自然语言处理 等术语。而这类技术依赖于大量的训练数据。谷歌翻译就是建立在超过1.5亿个词汇基础上的神经网络。成功部署这型模型所需的数据量超过了许多公司加起来的数据总量。
很多技术比深度学习使用更少的数据,但是当中仍然需要相当大的样本,还需要能够判断何时使用哪种方法的知识储备。目前需要大量的投入才能创建数据科学所需要的环境,拥有资金和昂贵的资源是远远不够的。
2. 是否有已制定的关键绩效指标(KPI)和 商业智能 报表?
如果没有对企业驱动因素的基本了解,那么将难以利用先进技术。
数据科学家能够通过机器学习进行预测,例如哪些用户会流失、哪些用户很活跃。但是如果缺乏对流失和高度活跃的定义,那么在构建预测模型之前会遇到问题。
此外, 如果没有足够的指标进行评估,那么将很难验证模型。 A/B测试等其他技术需要总体评估标准(OEC),这通常是业务驱动的KPI。
3. 数据科学家要做什么?
这是四个问题中最主观和最有趣的问题, “你想让数据科学家做什么?” 我得到的最常见的答案是:“我们不知道,这也是为什么我们需要雇用一位。”
在这种情况下,我会告诉该企业这是行不通的。虽然聘请数据科学家时,你并不需要成为该方面的专家,但是你应该清楚哪些是可行的、哪些是不可行的,从而不会设定不切实际的期望。
数据科学不是魔术,但也不是传统科学。 数据科学是一门艺术,也是一门科学, 这意味着当中技术和能力的可变性很大。企业可以考虑让现有团队的成员发展成数据科学家。对现有分析师来说,进入数据科学领域的方式之一是对现有的KPI进行预测。一方面,他们有机会学习熟悉的数据; 另一方面,对现有员工进行投资意味着将来市场招聘的需求减少。
4. 数据科学家有哪些内部支持?
如果数据科学家在你的企业没有适当的支持,那么请不要为招募他们而投资。近年来,数据科学课程数量激增,然而许多毕业生并没有准备好解决业务问题。绝大多数课程都让学生解决预先清洁好的数据。 在现实世界中,干净的数据并不存在。
在没有高级数据科学家指导的前提下,聘请初级数据科学家并不明智, 初级数据科学家会遇到难题,而且往往会导致错误的分析。初级的数据科学家团队难以将业务问题转化为技术问题,而错误的分析会导致任务难以完成。
聘请高级数据科学家并不能完全缓解这个问题,部分原因在于很难证明雇佣人员的水平和资历。如果你很幸运地聘请到优秀的人员,他仍然需要来自领导团队的大量支持。比如,创建从未使用过的模型;或者进行A/B测试但结果被忽略。更糟的是,分析问题所需的数据并没有被收集。
通常, 必要的第一步是强大的数据收集程序, 这需要由工程师或数据库管理员提供,而不是数据科学家。在很多企业中,高级数据科学家需要花大量时间完成数据需求和团队部署,而这很容易导致高级数据科学家的流失。
结语
招聘和留住优秀的数据科学家的成本是很昂贵的。 但如果能明确何时聘用、如何聘用、聘用哪种人才,则能够有效地减少成本。不要陷入招聘广告的陷阱,那些只是对工作技能的简单罗列。不要奢望数据科学家会魔法。一定要明确自身的真实需求,如果可能的话,在进行招聘之前咨询专业人员。企业数据方面的成功取决于以上这几点。
原文链接:
https://www.entrepreneur.com/article/310505
本文为专栏文章,来自:CDA数据分析师,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/55287.html 。
数据分析
2018-06-07 18:00:00
大数据 文摘作品 编译:傅一洋、笪洁琼、魏子敏
提升 数据分析 能力正成为企业数字化转型的当务之急。
成功的企业数字化案例显然有自己的共同点:
重视数据质量、重视数据上下文、以及建立有效的数据管理体制。
而失败的企业则各有各的问题。
我们调研了118家公司的首席信息官(CIO)、首席技术官(CTO)、数据总管以及IT部门的员工及顾问,找到了这7种企业数据实践中最可能出现的问题。
只做数据集中,并没有对数据进行整合
“数据整合是当今 数据分析 面临的最大挑战。”SAS公司的业务解决方案顾问,数据治理专业组织(DGPO)的首席发言人Anne Buff说道。
实际上,许多公司只是简单地将数据堆积在一起,并未对不同来源的数据进行整合。就拿身份认定来说,比如一套系统下“路人A”的信息与另一套系统下“路人A”(甚至可能是重名)的信息之间,没有进行关联,这样的话,就无法对“路人A”的身份进行完整性描述。
“数据整合并不等于将数据集中到一起,”Buff说,“对于某个研究对象,要将不同来源的数据相互关联,以便获取更准确的信息定位。一旦你这样做,当这一切相关数据都聚集在一起时,它将达到一个更完整的结果,即比尔史密斯是谁。你必须将它们关联起来。”
Buff还说道:各种数据集成技术使之成为可能,同时,正确的选用、实现并执行数据整合的技术,减少不必要的人工操作和重复劳动这点很重要。
数据科学家 会通过数据来寻找并分析竞争优势,可能的突破点等等,因此,数据整合也变得越发重要。
“如果不将以往所有的数据整合,就无法发现其中的模式。”Buff说道。
忽视了不同业务对数据的需求差别
“整合的集成数据技术对于一个成功的分析程序是至关重要的,必须要意识到不同业务部门对数据的需求是不同的,”Buff说道,“数据的形式不能千篇一律。相反,还需要考虑数据供给,IT部门需要将业务类型与数据形式相匹配。”
并不是所有的业务都需要整合过后的数据。以金融机构的众多需求为例,风控部门需要未经处理的原始数据,以从中发现异常。比如通过搜寻多组数据中某个人地址信息的,确定其是否申请了多笔贷款等。
“这些业务更倾向于研究多组相似数据间的差别,因此这些差别是要有所保留的。”Buff解释道。
另一方面,诸如市场部等部门希望实现准确的用户信息定位,因此只需要其中正确的那组数据。
数据工程师 可能比数据科学家更重要
数据科学家这个职业在过去几年中正迅速抢占硅谷、纽约、中关村、西二旗的各大互联网公司。一大批传统企业也开始设置这个职位,并且大批招募。
毕竟,每个公司都希望通过势头正盛的新兴技术使业务分析具有一定的预测性和分析说明,这需要专业团队和人员的支持。
但通常,这些公司挂出的招募岗位只有数据科学家这一种。
这是远远不够的。
数据科学家需要数据工程师来收集数据集,但是,数据工程师这一职位,在许多公司没有受到应有的重视。
“目前,大公司对数据工程师的需求增速是对数据科学家需求的两倍。” 贝恩公司旧金山办事处合伙人,高级分析和数字化实践负责人Lori Sherer这样说。
美联邦劳工统计局预测,目前数据工程师的平均年薪已经达到135,800美元,且未来十年里,对数据工程师的需求将继续保持快速增长态势,2026年前将新增44200个相关的就业岗位。
有专家称,同很多IT岗位一样,数据工程师的人才供不应求,部分企业会通过招聘或者从IT部门普通员工中选拔培训,来弥补这一人才缺口。
缺乏对数据时效性和生命周期的管理
近十年来,随着数据存储成本不断降低, IT部门可以将大量数据存储起来,并保存很长的时间。对于不断增长的数据量和数据分析需求来说,这是个好消息。
“公司都希望拥有大量数据。”Soaring Eagle咨询公司的创始人、《挖掘新黄金:管理你的商业数据(Mining New Gold: Managing Your Business Data)》的合著作者Penny Garbus说道。
但Garbus同时认为,许多企业都将数据留存的过久了。
“这不仅仅是存储成本的问题,超过十年的数据基本没有时效性了。”她说,“数据要被赋予生命周期。”
Garbus认为,数据留存期限要根据不同部门、不同组织来确定。例如,零售行业需要的是即时和相关的数据,而市场部门需要多年来的历史数据以探寻趋势。
这需要IT部门根据不同部门的需求,制定一套明确的数据时效标准,从而确保数据的有效性。
Garbus还补充道,对于那些“老旧”数据,只要保证有就可以了,不要将其放在核心数据库中。
只关注数据量而忽视数据相关性
“我们总喜欢用最容易获得的数据进行建模与分析,而不是最相关的。” Booz Allen Hamilton(IT咨询公司)的高级副总裁Steve Escaravage说。
他认为,这是目前公司或组织普遍存在的一个误区。或许,在寻找更多的数据集之前,应该先想想数据是否相关,而不是询问我们是否有正确的数据。
比如,许多公司会从大量数据中寻找异常。尽管充分性很重要,但优秀的公司同样兼顾数据的针对性。他们会关注来自于特定个体和机构的数据,并从中发现异常。比如医疗结构在分析病例时,会考虑到医生的轮班周期等。
Escaravage认为,公司或组织可以列一个数据意愿清单,由业务部门填写意愿,由CIO、CTO或首席数据高管实现数据收集。
忽略数据来源
“当今数据分析存在一个显著的问题,是数据偏见。偏向性的数据会造成分析结果偏差,从而影响到正确的业务决策与结果。其中的偏见来源于整个分析过程涉及的许多个部门,包括IT部门处理数据方式,都会有一些偏见。”Escaravage说道。
“很多时候,IT部门在对数据来源的追踪上,做的并不完善。如果无法意识到这一点,就会影响到数据模型的的性能,而且,缺乏数据来源的可见性使得对偏见的控制更为困难。”
Escaravage觉得,IT有义务搞清楚数据的来源在哪里,以及来源的相关情况。在投资数据管理的同时,也要制定一套源数据管理解决方案。
缺乏面向用户的数据上下文
Escaravage认为,不仅应该有一个强大的源数据管理程序,它可以追踪数据的来源,以及它是如何在系统中运行的,它应该为用户提供一些历史信息,并为一些通过分析产生的结果提供背景信息。
“有时我们会认为,拥有绝佳的数据和模型已经足够完美,但是近几年,由于分析方法越来越复杂,对数据和分析结果的解释变得越来越少。不像前几年,在将分析结果应用于业务时,会根据业务规则对数据进行分析阐述。”他说。
Escaravage解释道,更新的深度学习模型为分析结果提供了一些注解,也为决策提供了一些可行的建议,但无法提供对最佳决策有帮助甚至至关重要的上下文,例如某件事情发生的可能性与确定性等信息。因此,需要能提供更好的用户界面以帮助用户进行决策。
“其中的技术问题在于,要明确用户与数据模型的交互程度如何。UI/UX界面决定了系统对用户的透明度,而透明度取决于用户对分析结果的钻研深度,这些都是首席信息官(CIO)在建立分析系统前,应当考虑清楚的。”
相关报道:
https://www-cio-com.cdn.ampproject.org/c/s/www.cio.com/article/3269012/analytics/why-data-analytics-initiatives-still-fail.amp.html
本文为专栏文章,来自:大数据文摘,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/55037.html 。
数据分析
2018-06-03 13:14:00
作者 Nishikant Dhanuka 编译  Mika
Nishikant是Booking公司的一名高级 数据分析 师,在本文中他分享了自己在Booking从 数据科学家 新手到大师的发展历程。
求职
在迪拜做了3年咨询类工作之后,我作为一名数据科学家加入了Booking 。从咨询转行到数据科学领域是我职业生涯中的重大转变,现在看来我很高兴当初做了这一选择。
在面试时,我就对Booking的感觉特别好。我有机会与数据科学家交谈,面试官的背景非常多样,其中一位拥有天文学的博士学位,另一位是自己创业公司的首席技术官。
同时Booking的伙食特别好,这也是我选择Booking的原因之一。
入职
我还记得入职的第一天,同事问我”你对你的屏幕还满意吗?”这让我很意外,因为我以前工作时只配备了一台笔记本电脑。Booking之后给我配备了一台Mac、两个大屏幕以及其他一些酷炫的设备。
入职后不久,我参与的第一个入职项目涉及到分析大量文本,我需要从中得出业务见解。以前我只有结构化数据方面的经验,因此我对这个新挑战感到兴奋。我希望提高自己文本数据的水平,但不久之后我就遇到困难了,那就是Booking庞大的数据规模。
Booking每24小时订出150万个房间,同时有数百万人访问网站,这意味着数据科学家所接触的数据规模相当大。还好公司有使用Spark进行分布式计算的内部培训。通过培训,如今我能够在多台机器上运行分析。
项目
我的第二个项目是为合作网站构建推荐引擎。以前我只做过标准回归和分类模型,这是我第一次接触到协同过滤和分解机。
由于数据规模,我不得不用PySpark进行稀疏分布矩阵。在编写代码之后,我们进行了A / B测试,看这样是否会对我们的业务带来积极影响。这也是我第一次接触A / B测试,但幸运的是公司配有完备的实验工具和基础设施,从而让这一过程并不困难。通过多次迭代,我们顺利处理了冷启动问题,并成功完成了该项目。
Booking的数据科学家在Analytics Fair上展示项目
接下来是大量的项目,每个项目都有不同的挑战,作为数据科学家我需要不断地学习。例如,其中一个项目需要我将业务问题表示为加权网络图,并进行相关分析; 在另一个项目中,我需要从简单的数据分析中得出有价值的见解。
就这样过了两年半,我目前是Booking的高级数据科学家。现在我致力于研究 人工智能 产品的机器翻译,并通过部署神经网络和深度学习解决方案构建全面的生产系统。
团队构成
下面我打算介绍下Booking的团队构成。
我们采用“嵌入式”结构,数据科学家与业务紧密相连。我参与的团队中有开发人员、数据科学家、产品负责人和其他专家。团队结合所有的力量,将相关概念实施到具体产品。在日常运营中,我们遵循一定的准则:每日会议、回顾、待办事项、团队目标、KPI和OKR(目标和关键结果)。再加上每两周一次的会议,能够让团队稳步发展,并尽快学习。
正是与业务的紧密联系,Booking的数据科学家都有很强的沟通能力和商业意识,同时还有很强的专业技能。这些都是我们在面试求职者时要测试的基本技能。
出色的数据科学家
Booking共有120 多名数据科学家,而且社区在日益壮大。每位数据科学家都有不同的背景和技能强项。
有些人是数据科学新手,有些人则有丰富的工作经验; 有些人是贝叶斯派,有些人是频率学派; 有些人喜欢用 R语言 ,有些人更喜欢用 Python ; 有些人喜欢用Vowpal Wabbit,有些人则喜欢使用Spark和H2O进行分布式计算。
这种多样性可以让大家彼此学习和进步。我们每周都会举行相关的聚会和会谈,当中我们会谈论最新的行业动向和研究论文,并结合解决Booking的实际问题。此外,公司还会定期举办相关技术培训,包括A / B测试、Git、Hive、Python、R、Spark、H2O、TensorFlow等内容。
Booking数据科学社区每周会谈
在我看来,在Booking工作最大的财富就是出色的数据科学社区,在当中我每天都能学习新事物,并且十分开心。
面对的挑战
同时我们也有面对一些挑战。
首先,由于我们的数据科学社区发展得非常快,这也为分享知识带来了难度。为了解决这个问题,我们尝试了很多方法,比如针对专业的话题(比如自然语言处理),黑客马拉松等方面展开讨论,从而更好地分享知识。
让数据科学家参与业务也有其不利之处。有时在日常工作中我们会缺少同事的相关反馈。为了解决这个问题,我们鼓励大家分享各自的成果,并与同事一起讨论他们的最新项目。同时我们也为新员工提供导师计划。
尽管我们已多次为数据科学社区做出贡献,但我们也希望将成果分享给外部。我们目前正在制定一些指导方案。
Booking的数据科学家们在船上聚会
最后我想说,在Booking当数据科学家非常愉快,而且从来不会缺少机遇与挑战。
原文链接
https://towardsdatascience.com/diary-of-a-data-scientist-at-booking-com-924734c71417
本文为专栏文章,来自:CDA数据分析师,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/54849.html 。
数据分析
2018-06-01 06:12:00
写在前面
之前哈佛商业评论一篇很火的文章《 数据科学 家,21世纪最性感的工作》,激励了大量从事 数据分析 工作的人员。
根据IBM最近的预测:说到2020年,美国数据从业人员的数量将从36.4万增加到272万!
在各个行业,我们看到业务数据的分析职位空缺激增,但是所有这些职位都需要完全相同的技能组合吗?我收到了许多关于数据分析行业职业发展的问题。这些问题通常来自那些在数据分析领域寻求突破、寻求向上发展的人,或者那些已经在该行业工作并正在寻找更深层发展的人。
在本文中,我们将看看分析行业中可用的主要角色。我还会提出一个框架,在业务分析领域思考你的职业生涯。
关于分析市场
让我从在麦肯锡关于 大数据 的报告 (2011年5月)中发布的几行/数据点开始 :仅美国就有140,000到190,000人的短缺,拥有分析专业知识,150万经理和分析师具备基于大数据分析理解和做出决策的技能。
注意“具备基于大数据分析理解和做出决策的技能”。该行业将需要大量的大数据和机器学习专家,甚至需要更多(大约10x)可以基于分析做出决策的人员,即使他们可能不是大数据或机器学习方面的专家。
这些角色主要是战略角色和产品管理角色,可以为他们的分析专家解决新的挑战。我们将在本文后面将这些战略角色与数据科学家角色进行对比。首先,让我们试着了解这个行业真的有多么多样化。
如果您绘制了所有与分析相关的文章(如下图所示的样本)的文字云,您将看到所有类型的词汇出现,包括统计数据,计算机编程,策略,计划,报告等。业务领域分析非常多元化,具有分析技能和商业头脑的人员在所有行业中担任众多不同角色。考虑到你的职业生涯有很多可能的选择,你可能会觉得你失去了你是否在职业生涯中取得进步的感觉。
业务分析专业人员做什么?
“业务分析”一词完美地总结了我们在业务分析下分类的每种类型的工作。“业务”强调业务理解的重要性,“分析”指的是统计,计算机工程和运营研究在这类角色中的重要性。
分析专业人员最终可以以非常具有战略眼光的角色工作,也可以作为非常专业的深度学习科学家工作。前者角色具有较强的业务组成部分,而后者则具有更强大的分析功能。显然,您的角色通常在这两个组件之间进行权衡,您可以在两个组件的比例不同的角色之间切换。您为自己创造的价值是商业理解和分析的正相关函数。从数学上讲,价值=功能(商业理解,分析)有了这个理解,我在下面的交叉表中绘制了我们行业中的各种角色:
显然,上图是我对这个行业的个人理解,这个图中每个角色的位置当然是可以辩论的。我希望您关注的主要想法是可以在业务分析行业中扮演的角色多样性,以及您可以从当前角色获得的路径变化。让我们首先尝试理解上面关于角色类别的5个突出显示的框中的每一个。
1、报告角色
从2000年到2012年,这是业务分析专业人员的主要角色类别。角色主要关注“发生了什么(事件)”,而不是“为什么(事件)发生”。然而,近几年来,这些角色中的大多数都是在公司实现了大量这些流程的自动化之后发展起来的,机器学习越来越流行 然而,仍然有很多角色会有超过50%的报告工作,其余的角色回答这个问题 – “事件为什么会发生?”。
这对于开始分析行业的职业生涯是一个很好的角色。但从长远来看,您应该采取主动,并转而专注于“现在发生了什么?”(即 商业智能 /仪表板)或侧重于“接下来会发生什么?”(即预测分析)的角色。
2、中级分析角色
这是我开始职业生涯的角色类型。大多数经济学/统计学/计算机科学毕业生将开始他们的这些角色的旅程。这是业务和分析的最佳组合。它是了解这两个世界最好的伟大方式。
中间分析领域的角色也很多样化。这个类别中的一个极端角色将集中在商业智能上,试图解决“现在发生了什么?”。这一类别的另一个极端是高度关注业务的角色,例如产品定价,您需要创建大量业务场景并为您的公司销售的产品找到最佳价格。
大多数角色在了解业务和使用诸如决策管理/风险分析/欺诈分析中的深度学习等尖端工具之间达到更为理想的平衡。大多数这些角色都涉及自动决策。例如,您可能会负责创建一种算法,该算法可以根据客户风险状况接受或拒绝信用卡应用程序,也可以选择那些倾向于选择交叉销售保险产品的客户。所有这些业务问题都要求您创建批量客户配置文件的预测模型,并根据某些业务指标对其进行排名。
如果你在这个团队中,几乎所有的选择都将被打开。您现在可以选择转向更具战略性的角色,或者您可以选择成为数据科学家。如果你不知道下一步该去哪里,找一个合适的好方法就是在两个盒子的边界上扮演一个角色。例如,如果您希望在未来发挥战略作用,您可以通过在基于P&L的中间分析角色(如产品定价)中发挥作用来测试您的适应性。还有一些角色可以选择组合分析,以便获得一系列战略角色。请注意,如果您选择在策略角色的路径上前进,您可能必须没有深度学习等数据科学技术。
另一方面,如果你想测试自己作为数据科学家的身材,你可以从事嵌入式数据科学家的工作,而不是纯粹的数据科学家角色。这样,您在进入研究型角色之前不需要失去对业务的掌控。
除了上述两条路径之外,您还有另外一种方法可以在业务与分析之间寻找一个良好的平衡点 – Tech Product Manager角色。但这种角色在行业中并不容易获得。数据科学主要用于公司通过构建数据支持策略来发现其他公司的竞争优势。
像Google和Facebook这样的技术公司不仅使用分析来制定战略,而且还使用分析来创建产品。例如,Google即搜即搜是一种科技产品,它使用机器学习来提供搜索结果。这些科技公司寻找具有商业损益和机器学习技能的人来设计这些产品。如果你选择在这条道路上前进,你不仅应该适用于大型科技巨头,还应该寻找产品经理在NICE,Aspect或Interactions等技能公司中的角色。
3、战略角色
你可能听说过一个重要的经济原则 – “竞争市场中没有经济利润”:经济利润的存在吸引了进入,经济损失导致退出,并且在长期均衡中,完全竞争行业的企业将获得零经济利润。
如果所有的企业都处于完全竞争的市场,他们如何赚钱?如果你是一名经济学学生,你会很好地知道答案。所有成功的企业都是建立在市场低效的基础之上,因此没有“完美的竞争”。战略家的角色是识别这些不完善之处,并培育他们以成功经营业务。对于大公司,我们在企业层面和业务层面都有策略师。
企业战略是当你在企业层面上回答诸如“什么是你的公司的正确业务组合?”,“为了达成这个组合,你需要什么新的业务来获得/投资/增长/关闭?”等问题。 “什么是适当的组织结构为您的企业,将促进运营和其他领域的协同作用?”。例如,如果您为富国银行的企业战略工作,您将制定收购或关闭投资/零售银行/信用卡等业务的战略; 您还将致力于创建全球运营以消除个体业务的运营成本等。
业务战略更多地与特定业务相关联。虽然企业战略可能更侧重于公司层面的事物费用方面,但业务战略更侧重于最大化净收入。例如,富国银行信用卡策略师可能会专注于最大限度地提高其卡片客户的收入。许多运营可能是富国银行所有业务领域的共享资产,例如呼叫中心,聊天中心,分支机构等。因此,这些费用负责人在企业级而不是业务级别上得到了更好的优化。各公司的责任分配可能有所不同,但大多数企业和公司战略家都携手合作。
这两种角色都需要您通过创建各种业务场景和计算不同投资的净现值来估计产品功能变更,流程变更和技术投资的收益。分析专业人员非常适合担任此类角色,因为他们掌握了大量数据并深入了解将用于创造竞争优势的最新技术。在2010年之前开始职业生涯的分析专业人士目前在战略角色中占有很大的比例。
4、数据科学家的角色
对于大多数希望进入数据科学领域的人来说,这是最令人着迷的角色。数据科学家的角色是专家的职位。您可以专注于不同类型的技能,如语音分析,文本分析(NLP),图像处理,视频处理,医学模拟,材料模拟等。这些专家角色的数量非常有限,因此这类专家的价值是巨大的。这就是为什么我们现在看到如此高的数据科学家需求。
为了在这些角色中脱颖而出,您需要随时了解最新的工具和技术。您还应该投资于使用相关语言进行自我培训,并有能力以简单的方式向客户和企业解释您的复杂模型。如果您觉得需要掌握业务概念,您可以随时回到战略方面。
写在最后
本文中提到的职业道路是基于我个人的经验以及我与各种分析领域的成功专业人士进行的一些讨论。通过免费在线提供所有资源,您可以使用正确的策略轻松迁移到任何期望的角色。我希望这篇文章能帮助你确定你的职业生涯轨迹。 原文作者:Tavish Srivastava
原文链接:https://www.analyticsvidhya.com/blog/2018/05/career-paths-business-analytics-role-data-science/
本文由 翻译小组 翻译发布,英文链接:,转载或内容合作请联系我们,未经允许谢绝转载,本文链接:https://www.afenxi.com/54692.html 。
数据分析
2018-05-31 22:21:00
译者 | 郝毅编辑 | Debra微信公众号 | AI 前线(ID:ai-front)
从推动复杂市场的预测分析到到效率更高的自动化流程,技术明显可以加速化企业在前沿竞争的步伐。但是,如果推动这些创新的数据良莠不齐,那么不管使用哪种工具效果都会大打折扣。
“数据质量不佳是阻碍 机器学习 广泛发展的主要原因”——数据质量管理的先驱者之一,数据博士 Thomas C. Redman 如是说,当然这样想的不止他一个人。
众所周知,训练数据决定了机器学习系统的性能。高质量的数据可以得到更好的结果,不好的数据会流经整个系统产生没用的信息。
下面我们就来谈谈错误的数据是如何影响机器学习的,以及如何减轻风险。
在数据缺陷带来的影响中,公司首先看到了错误分析、错误预测和糟糕决策。随着 人工智能 技术越来越流行,高质量的机器学习的需求越来越清晰,计算机科学的 GIGO 原则变得更加重要了。
Redman 提醒我们“不良数据的引入可能会出现在两个地方:第一个便是用于训练模型的数据,第二个便是用于测试的新数据。虽说数据科学家和工程师正在努力的精炼他们的人工智能、机器学习和深度学习算法,但是“只有 %3 的公司”能够提供符合基本质量标准的数据。
我们不能将失败归结于机器,但是我们可以采取一些措施缓解不良数据产生的影响。
数据丢失或不完整
有些时候,由于某些信息不能直接获取到,数据会被组合并某些字段进行留空。或者当数据被收集时执行的分析和当前的分析所面临的目标不同,导致某些值被省略。然而,然而,学习,解释和预测 ——ML 的主要目标 ,很难通过不完整的信息来实现。
面对上述问题,对应的解决方案是:尽管消除问题数据的方法对结果会有很大提升,但是仅在问题数据所占比例较小时候,这种方法的去除效果会比较好。另一种方案是使用合成数据:通过算法创建符合真实数据特征的模拟数据。合成数据是一种新兴技术,可以帮助消除访问完整训练数据的障碍。
数据不准确
部署 ML 项目时的是在训练预测模型之前清洗数据。但清洗数据并不总能识别或纠正每一个错误,并且数据仍然可能会不完美。 数据科学家已经花费了大部分时间来对抗这一问题,然而,一个预测模型的输出会作为后续模型的输入,这意味着即使是一个小错误也会产生显著的负面影响。
面对上述问题,对应的解决方案是:提供足够的时间清洗数据,评估数据源并在每个阶段对性能进行测试。 保持数据集的清洁是很困难的,但如果将清洗数据的任务分配给特定的团队,则会变得容易。 为传入数据的质量创建和执行明确的标准,并立即寻找并消除错误的根本原因。
数据有偏差在机器学习训练过程中,如果数据存在偏差,数据的完整性会受损,这会直接影响到预测结果。例如,当搜索一位女性联系人时,LinkedIn 的搜索引擎可能存在性别偏差,从而促使该网站以男性名字作出回应。当在平台上搜索“Michelle”返回“Micheal”时,这是一种引起用户反感的明显错误。
面对上述问题,对应的解决方案是:确保数据和分析数据的算法与当前项目的值和目标保持一致。经常检查机器学习模型并仔细检查训练数据,以发现有意和无意的偏差。如果发现偏差,请将其隔离并移除输入数据集中与其相关的部分。
总结
发现有缺陷的数据并改进能够有效的提升机器学习算法。然而,Looker(一家领先的数据平台公司)首席数据传播者丹尼尔•明茨(Daniel Mintz)强调了一个更令人沮丧的现实。“真正令人害怕的是何时发现不好的数据。虽然用于清洗数据的时间宝贵,但没有发现问题而导致的后果往往更加可怕。”
他继续说道,“当你知道你不知道的时候,你是很谨慎的。但是,有缺陷的数据会让你陷入一种不自知的状态,那么你就有可能根据这些错误的信息做出错误的决策。这就是真正的危险所在。“
在你的机器学习项目中建立质量数据文化是可能的。彻底的测试、清洗和审计确保准确性,同时仔细的计划可以发现并消除隐藏在训练集中的偏差。最后,你可以花更多的时间来了解您的数据 ——它来自哪里以及你想通过它实现的目标,你的机器学习项目将会更成功。
查看英文原文:
https://towardsdatascience.com/what-to-do-when-bad-data-thwarts-machine-learning-success-fb82249aae8b
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/54632.html 。
数据分析
2018-05-30 16:15:00

想要在互联网获得效益,离不开流量,就好像我们在火车站这样的地方,看到一个不起眼的小卖店,租金不菲,同样效益可观,这就是因为火车站强大的客流量带来的,对于企业来说,想要通过网站获得效益,也离不开流量。
网站天生自带流量吗答案是否定的,有的企业说,找网站建设公司花费数万元做网站,结果是有去无回。很多企业上线网站之后,运营就搁置了,时间长了自然不会有流量,如果一个网站不能带来流量,再豪华的装修也是摆设。
这个时候,有的企业又表示,如果这么说,那我随便做个网站就可以了。这么做好像有点道理,可惜如今已经错过风口,行不通了!早先的草根站长,就是随便搭建一个网站,然后依靠搜索引擎带来的流量,通过点击广告就能获得不菲的受益,而现在,这样的网站几乎灭绝了,因为网站体验差,用户流失快,被搜索引擎毫不留情的给降权了!
所以,网站通过流量变现,首先要呈现给用户一个“像模像样”的网站,给用户造成一种场景,这个场景就是能够激发用户需求的环境。很多电商网站都是这么做的,而且有一些东西,只有专业运营才能切身感受到,企业网站在上线时,搭建这样场景,是变现的前提。
除了上线一个大气的网站之外,企业还要提供用户值得买的产品,不是所有的产品都适合在互联网上销售,而且不同的产品采取的推广策略是不同的。
好产品具有这样的属性,适合互联网销售,能够自带流量。企业网站提供的产品也许是来自自己的核心产品,这个时候就会出现一个矛盾,如何解决传统营销渠道。
有的企业网站甚至不希望通过网站卖产品,而是把网站当做一张名片,告诉用户,我家有这个东西,如果有意,请通过网站的联系方式洽谈……如何让更多的用户看到你呢显然,还有一个更重要的问题,那就是网站从哪里来
流量和推广是呈正比的, 就是一个网站推广力度越大,获得的流量就越多。许多企业都觉得做互联网营销很烧钱,其实从长远的角度看,烧钱只是一时的,就像一个从来没有干过体力活的人,冷不丁干点体力活,他很难把控自己,最终搞得腰酸背痛,如果坚持一段时间之后,会逐渐适应的,很多企业网站运营前期透支,后期无力跟上,结果搞得的很狼狈,一个草根都可以运营一个网站,获得流量,赚取收入,企业怎么就做不好呢
好的产品是值得推敲的, 好的网站是通过不断的优化和推广被众人知晓的, 网站需要流量,而流量来源于推广,这个时候,才可以通过流量考虑如何变现的问题,显然,在这之前,需要做一个漂亮的网站,投入一定的资金进行网站推广,这些环节都经历过后,才是网站变现的开始。
而事实上,很多企业网站都想着走终南捷径,这其实是错误的,不经历风雨,怎么见彩虹,懂得坚守,慢工出细活,网站有了流量,有了用户之后,才可以进行商业化操作,直接就直奔主题,显得自不量力,最终自食苦果而已!
部分内容来源于网络,若侵删!
本文由 99click 投稿至 数据分析网 并经编辑发表,内容观点不代表本站立场,如转载请联系原作者,本文链接:https://www.afenxi.com/54601.html 。
数据分析
2018-05-30 09:19:00
根据30年的商业经验,下面的列表是我认为首先应该在数据科学课中讲授的(非全面的)内容选择。 这是我文章的后续内容 为什么Logistic回归应该最后讲解。
我不确定下面这些 主题 是否在数据营或大学课堂上讨论过。 问题之一是招聘教师的方式。 招聘过程是有利于以学业成就或其“明星”身份而闻名的个人,并且他们倾向于在数十年内反复教导同一事物。 厉害的专业人士对成为老师毫无兴趣(俗话说:如果你做不到,就写出来,如果你写不出来,就教你。)
它不一定是那样。 大量合格的专业人士,尽管不是明星,但他们会成为完美的老师,并不一定是受到金钱的激励。 他们在实战中获得大量的经验,可能会是很棒的老师,帮助学生处理真实的数据。 他们不需要成为 数据科学家 ,许多工程师完全有能力(并且有资格)提供强大的数据科学培训。
在 数据科学课程 中应该尽早讲解的主题
我的建议如下: 概述算法如何工作 不同类型的数据和数据问题(数据缺失,数据重复,数据错误)以及探索真实样本数据集,并且有建设性地批判他们 如何确定有用的度量指标 数据科学项目的生命周期 编程语言简介和基本命令行指令(Unix命令:grep,sort,uniq,head,Unix管道等)。 将结果传达给非专家并理解决策者的请求(将请求转化为数据科学家的行动项目) 概述常见技术的优缺点,以及何时使用它们 实例探究 能够识别有缺陷的研究
相比之下,传统数据科学课程中首先讨论了一个典型的主题列表: 概率论,随机变量,最大似然估计 线性回归, 逻辑回归 ,方差分析,一般线性模型 K-NN(最近邻居聚类),层次聚类 假设检验,非参数统计,马尔可夫链,时间序列 NLP,尤其是词云(适用于小样本Twitter数据) 协同过滤算法 神经网络,决策树,线性判别分析,朴素贝叶斯
这些技术没有什么根本性的错误(除了最后两个),但是你不可能在职业生涯中使用它们 – 而不是在课堂上提出的基本版本 – 除非你是在一群志同道合的人中全部使用相同的老式黑盒子工具。确实应该教他们,但也许不是一开始。
数据科学课程中应包含的主题
下面列出的不应该在一开始就教,但是非常有用,很少包括在标准课程中: 模型选择,工具(产品)选择,算法选择 经验法则 最佳实践 将非结构化数据转换为结构化数据(创建分类法,编目算法和自动标注) 如此处所述,混合多种技术以获得最佳效果 测量模型表现(R-Squared是最差的指标,但通常是课堂上教授的唯一指标) 数据增强(找到外部数据集和功能以获得更好的预测能力,将其与内部数据混合) 建立你自己的自制模型和算法 大数据 的诅咒(与维度的诅咒不同)以及如何区分相关和因果关系 应该更新数据科学实现(例如查找表)的频率 从设计原型到生产模式部署:警告 蒙特卡洛模拟(一种简单的替代方案,可以计算置信区间和测试统计假设,甚至不需要知道随机变量是什么)。 原文链接:
https://www.datasciencecentral.com/profiles/blogs/the-first-things-you-should-learn-as-a-data-scientist-not-what-yo
编译:数据人网
出处:http://shujuren.org/article/587.html
本文为专栏文章,来自:数据人网,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/54876.html 。
数据分析
2018-05-28 23:51:00
译者 | 无明编辑 | Natalie微信公众号 | AI 前线(ID:ai-front)
为什么说数据科学很性感?这与众多新应用和整个行业在使用 大数据 不无关系。这样的例子不胜枚举,如语音识别、计算机视觉中的物体识别、机器人和自动驾驶、生物信息学、神经科学、系外行星的发现和对宇宙起源的理解。在这些例子中, 数据科学家 是整个企业的核心。他们必须将领域知识和统计专业知识结合起来,并使用最新的计算机科学思想来应用这些知识。
说到底,性感最后还是要归结为有效。最近,我阅读了 Sebastian Gutierrez 的“Data Scientists at Work”一书。Sebastian 采访了来自 16 个不同行业的 16 位数据科学家,包括 Facebook 人工智能 研究总监 Yann LeCun,了解他们如何进行理论思考、他们在解决什么问题、数据能够为我们带来什么好处,以及怎样才能在这方面取得成功。这 16 位受访者身处从大数据中获取价值的最前沿,跨越了各种公共和私有组织(从创业公司和成熟企业到研究团体和人道主义非营利组织)——广告、电子商务、电子邮件营销、企业云计算、时尚、工业互联网、互联网电视和娱乐、音乐、非营利组织、神经生物学、报纸和媒体、专业和社交网络、零售、销售情报和风险投资。
Sebastian 问了一些开放性的问题,让每位受访者能够清晰而准确地表达出他们的个性和自发性思考过程。这些数据科学家们分享了他们对数据科学的一些想法,比如数据科学对他们来说意味着什么、他们如何看待数据科学、他们对加入该领域的人有哪些建议,以及一个数据科学家要怎样才能在这个领域取得成功。
1.Chris Wiggins,纽约时报首席数据科学家、哥伦比亚应用数学副教授
“创造力和关怀。你必须真正喜欢某件事情,这样才能在这件事情上进行长时间的思考。你还应该具备怀疑精神。对于博士生来说,五年时间足以让你发现一些东西,让你意识到一路上自己犯过哪些错。你会发现自己搞砸了很多东西,然后一点一点去修复它们。获得博士学位的过程锻炼了你的怀疑精神,特别是在研究工作中,它会让你对那些看起来很确定的事情心存疑虑。我认为这很重要,否则的话,你会很容易选择一条错误的道路,只是因为在第一次找到这条路时,你感觉它是对的。
虽然这听起来有点无聊,但我还是要说,数据科学家需要真正的技术深度。 通过维基百科来理解 机器学习 并非难事。但实际上,要真正做到这一点,需要知道哪些工具适用于什么样的任务,并充分了解每种工具的局限性。这个过程是没有捷径可走的,你必然会犯下很多错误。 你必须学会如何将分类问题归为聚类问题,或将聚类问题归为假设检验问题。
你开始尝试某些事情,并相信自己做的是对的,但到最后才意识到自己完全搞错了——这样的过程会不断出现,而且没有捷径可走。你要坚持下去,并不断犯错误。成为专家需要很长时间,需要经历多年的试错,几个世纪以来一直如此。著名物理学家 Niels Bohr 曾经说过, 要想成为一个领域的专家,就要在这个领域中犯下所有可能的错误。 ”
2.Caitlin Smallwood,Netflix 科学与算法副总裁
“我想说,在尝试做其他事情之前,先下功夫理解数据基础知识,尽管这样做并不性感,也不那么有趣。换句话说,就是要努力了解如何捕获数据,了解每个数据字段的定义方式,了解是否发生数据丢失。如果出现数据缺失,这是否意味着什么?它是不是只在某些情况下丢失?你真的会遇到这类微妙的数据陷阱,真的。
无论你对建模中最有趣的部分感到多么兴奋,都不能对原始数据视而不见。在开始建模之前,务必先检查有关底层数据的一切。
随着时间的推移,我学到了另一件事:混合算法比单一算法更好,因为不同的技术会利用不同的数据模式,特别是在复杂的大型数据集中。尽管我们可以采用一种特定的算法,并通过迭代来改进它,但我所看到的是, 算法组合往往比单一算法更好 。”
3.Yann LeCun,Facebook 人工智能 研究总监,纽约大学数据科学 / 计算机科学 / 神经科学教授
“我总是给出同样的建议,因为我经常被问到这个问题。我认为, 如果你是一名本科生,可以选择一门专业,让你可以尽可能多地学习数学和物理。我要说的内容可能听起来似是而非,但工程学或物理学专业可能比数学、计算机科学或经济学更合适。 当然,你需要学习编程,所以需要学习计算机科学课程,学会如何编程。然后再学习数据科学研究生课程,学习机器学习、人工智能或计算机视觉课程,因为你需要接触这些技术。在那之后,尽可能多地学习数学和物理课程,特别是连续性应用数学课程,这些在以后的实战中都用得上。
在数据科学或人工智能领域有许多不同类型的工作,就看你想要做什么。人们应该想清楚他们想要做什么,然后花时间去研究相应的课题。深度学习是当前的一个热门话题,所以可以学习和了解与神经网络相关的经典著作,学习优化,学习线性代数和其他类似的课题。这样有助于你了解我们每天都要面对的底层数学技术和一般性概念。”
4.Erin Shellman,Zymergen 数据科学经理,Nordstrom 数据实验室和 AWS S3 前数据科学家
“对于那些仍在考虑研究什么的人来说,我想告诉他们的是,STEM 领域是最容易的,特别是 TEM。通过学习 STEM 可以更好地了解这个领域,我也是这么看待数学、统计和机器学习的。我对数学本身不是非常感兴趣,但我对使用数学来描述事物很感兴趣。毕竟它们都是工具,所以即使你没有兴趣学习数学或统计学,花点时间学习它们仍然是值得的,并考虑如何将它们应用在你真正热爱的事情上。
对于想转型的人来说,我想告诉他们的是,这是一条艰难的路。要知道,改行是很难的,你不得不付出百倍的努力。这个问题不是数据科学独有的——生活本来就是如此。 在这个陌生的领域里生存很艰难,不过你可以经常参加技术会议,认识这个领域的优秀人物。我的头号生活格言是“跟进”,如果你认为你能从某人那里学到东西,那么就跟他们交谈,并努力跟进。
数据科学家的帖子可能会令人生畏,因为大多数内容看起来就像数据科学术语表一样难懂。事实上,技术变化如此之快,没有人能够掌握所有的东西,并把他们的经验写成帖子。当你看到这些帖子,可能会觉得,“这不适合我,我没有这些技能,也没有什么可以贡献的。”我建议你改变这种想法, 只要你愿意做出改变,一切皆有可能。
最后,公司需要的是能够严格定义问题并设计解决方案的人,他们也需要善于学习的人。我认为这些才是核心技能。”
5.Daniel Tunkelang,Twiggle 首席搜索推广官,领英搜索质量总监
“对于来自数学或物理科学领域的人,我建议他们花些精力在学习软件技能上,特别是 Hadoop 和 R 语言,它们是使用最广泛的工具。而来自软件工程领域的人应该参加机器学习课程,并使用真实的数据集来开发项目,现在有很多免费的数据集。正如许多人所说的,成为数据科学家最好的方法是参与到数据科学项目中。数据已经有了,况且数据科学并不难学,特别是对于来自数学、科学或工程领域的专业人士来说。
阅读“数据的不合理有效性”(http://www.cs.columbia.edu/igert/courses/E6898/Norvig.pdf ),这篇文章很经典 ,是由 Google 研究人员 Alon Halevy、Peter Norvig 和 Fernando Pereira 共同撰写。这篇文章的核心观点是“更多的数据比好的算法更重要”。这篇文章值得一读,因为它概述了使用网络规模数据来改善语音识别和机器翻译的最新成果。然后,请看一下 Monica Rogati 关于更好的数据如何击败更多数据的评论(https://www.youtube.com/watchv=F7iopLnhDik ) 。如果你能理解和内化上述的两个观点,那么你已经走在了成为一名数据科学家的路上。”
6.John Foreman,MailChimp 产品管理副总裁兼前首席数据科学家
“我发现招到合适的人很难。这确实是一件很困难的事情,因为在我们的大学系统中,无论是在校生还是毕业生,他们只关注一件事情,也就是他们所在的专业。但数据科学家有点像新兴的文艺复兴人士,因为数据科学本质上是多学科的。
这就是为什么数据科学家比普通的计算机程序员更了解统计学,同时又比统计学家更会编程。为什么这么说?这说明数据科学家需要对这两件事情都需要略知一二。不过,我想说的是,他们不仅需要同时知道这两件事情,他们也必须知道如何与人沟通。他们不仅需要知道基本的统计学,还需要知道概率论、组合数学、微积分等。他们还需要知道如何围着数据转,如何使用数据库,甚至可能需要懂一点 OR(比值比)。有很多事情他们都需要知道。所以很难找到符合条件的人,因为他们必须接触很多学科,必须能够聪明地表达出他们的经验。对于申请人来说,这是一项艰巨的任务。
聘用符合条件的人需要很长时间,这就是为什么人们一直在讨论现在的数据科学领域没有足够人才。我认为在某种程度上,人们的顾虑是对的。我认为一些新开设的学位课程对这一问题会有所缓解。但即使如此,对于那些从这些学位课程中走出来的人,比如 MailChimp,我们还是会考察他们,看看他们如何将这些课程教给他们的知识应用在实际当中。这个过程将淘汰掉很多人。我希望有更多的课程将重点放在数据科学家的沟通和协作方面。”
7.Roger Ehrenberg,IA Ventures 执行合伙人
“我认为最大的机遇也是最大的挑战。除此之外, 在面对需要整合多个数据集的问题时,僵化的官僚主义、僵化的基础设施和数据孤岛让解决这些问题难上加难 。这种情况将会发生,而且我认为我们正在讨论的很多技术都直接关系到如何让医疗保健变得更好、更实惠、更普及。这是我们一整代人的机会。
早期的另一个重要领域是风险管理,包括融资、交易和保险。在将新数据集纳入风险评估时,问题会变得非常棘手,特别是在将这些技术应用于像保险这样的行业时,存在大量的隐私和数据问题。与此同时,这些公司开始逐步走向开放,并尝试与创业社区进行互动,以便利用新的技术。这是我发现的令人难以置信的另一个领域。
我热衷的第三个领域是重塑制造业并让其变得更有效率。制造业已经出现回归本土的趋势。更强大的制造业可能是在美国重建一个充满活力中产阶级的桥梁。我认为技术有助于加速这一趋势。”
8.Claudia Perlich,Dstillery 首席科学家
“我认为,到了最后,学习数据科学就像学习滑雪一样,变成了一件必做的事情。你看了很多教学视频,然后带上该死的滑雪板,沿着山坡滑下去。你会在途中摔几次跤,不过没关系,这是你应该获得的学习体验。实际上,我更倾向于向受访者询问那些不顺利的事情,而不是那些顺理成章的事情,因为这样才能告诉我们,他们在这个过程中学到了什么。
每当有人问我“我该做什么”时,我会说:“可以参加机器学习在线课程,毫无疑问,这些课程很有用。当然,你必须会编程,至少懂一些。你不一定要是 Java 程序员,但你必须以某种方式完成某件事,不管你是怎么做到的。”
最后,无论是在 DataKind 做志愿者,花时间帮非政府组织做事,还是去 Kaggle 网站参加他们的 数据挖掘 竞赛,只要让自己参与其中即可。如果是在 Kaggle 网站上,就去逛逛论坛,看看其他人怎么讨论这些问题,因为那里正是你了解人们在做什么、什么管用以及什么不管用的地方。因此,即使你没有从中获得任何回报,但至少参与了与数据有关的事情,这本身就是一件好事。
记住,除了滑下那座山,别无他法。因此,花时间去做志愿者吧,以任何你能想到的方式让自己参与其中,如果你有机会实习,那就再完美不过了。除此之外,你还有很多机会可以把握,所以放手去做吧。”
9.Jonathan Lenaghan,PlaceIQ 首席科学家兼产品开发高级副总裁
“首先,自我批评是非常重要的。总是质疑自己提出的假设,对自己的产出保持偏执的态度,做到这点其实很容易。从技能方面来看,如果人们真的想在数据科学领域取得成功,最好是先掌握软件工程技能。尽管我们可能会雇佣那些只有很少编程经验的人,但我们也会很努力地让他们意识到工程、工程实践,以及敏捷编程实践的重要性。这对他们和我们来说都很有帮助,因为这些现在几乎都可以应用在数据科学中。
在 DevOps 领域,他们已经拥有诸如持续集成、持续构建、自动化测试和测试框架这些东西——所有这些都可以很容易地从 DevOps 领域映射到 DataOps 领域。我认为这是一个非常强大的概念。测试框架对数据来说非常重要,如果更改了代码,可以针对数据进行回归测试。要想在数据科学领域取得快速的发展,掌握工程学思想是非常重要的。阅读“Code Complete”和“The Pragmatic Programmer”这两本书比阅读机器学习相关书籍会让你收获更多——当然,阅读机器学习相关书籍也是必需的。”
10.Anna Smith,Spotify 高级数据工程师,Rent the Runway 前分析工程师
“ 如果你刚刚开始从事数据科学工作,你最需要明白的是,应该大胆地向他人请教问题 。我也认为谦逊是非常重要的。你必须确保你没有被束缚在你正在做的事情当中,你可以随时做出改变,并重新开始。我认为,在刚开始时能够舍弃代码真的很难,但最重要的是要着手去做一些事情。
即使你没有从事数据科学工作,仍然可以在平时探索数据集,并从数据中获得一些洞见。在我的个人业余时间里,我使用过 Reddit 的数据。我问自己,“我可以从 Reddit 的数据中挖掘出些什么?”一旦开始问自己这样的问题,你就会看到其他人是如何解决同样的问题的。带着你的直觉阅读别人的文章,就好像“我可以按照自己的方式来使用这种技术”一样。放慢脚步,缓缓向前。在刚开始时尝试阅读很多东西,但这样做并没有太大帮助,除非你已经充分利用代码和数据,并了解它们的工作原理。人们在书里展现的东西一切都很美好,但在现实生活中,事实并非如此。
我认为多做一些尝试也是非常重要的。我从没有想过我会出现在这里,我也不知道五年后我会在哪里。但也许这就是我的学习方法,通过在不同学科中做一些事情来尝试了解最适合自己的东西。”
11.Andre Kargeistsenko,Taxify 数据科学主管,PlanetOS 联合创始人和研究主管
“虽然这只是泛泛的建议,但我还是想说,你应该相信自己,并追随你的内心。 我们很容易受媒体的影响,选择一条你不想走的路 。说到数据科学,你应该把它看作是职业生涯的起点。拥有这样的背景对任何事情都有好处。开发软件技能和使用统计数据的能力将有助于你在选择领域时做出更明智的决策。我们可以了解如何通过数据来提升运动员的表现,比如一个运动员通过优化和练习跳跃的角度而成为跳远金牌得主。这些是体育领域使用数据作为驱动的例子。
至于更具体的技术建议,要取决于接受建议的人的抱负。如果这个人想要创建新的方法和工具,那么就需要不一样的建议。你要坚持,并继续朝着你的方向前进,你一定会成功。但是,如果你的意图具有多样性和灵活性,那么你就需要一系列不同的工具。
一位斯坦福大学教授曾经给过我最好的建议,我之前参加了他的课程。他建议塑造自己的 T 型竞争力,但在核心能力之外还需要一些其他的竞争力,在必要的情况下,你就有另外一条路可以走。除了单个垂直领域的专业知识外,他还建议我们具备足够宽泛的背景,以便可以在不同的情况下与不同的人一起工作。所以,在你大学期间,建立一种包含其他能力的 T 形竞争力可能是最好的选择。
或许, 最重要的是要围绕在比你优秀的人身边,并向他们学习,这是最好的建议 。如果你在念大学,那么这是观察人们能力多样化的最佳环境。如果能与最优秀的人一起工作,将帮助你获得成功。”
12.Amer Heineike,PrimerAI 技术副总裁,Quid 前数学任主管
“我想,也许他们需要先想清楚自己真正关心的是什么。他们想要做什么?目前,数据科学是一个热门话题,所以我认为有很多人认为如果他们能够给自己打上‘数据科学家’的标签,那么快乐和金钱就会随之而来。所以我真的建议你先搞清楚自己真正关心的是数据科学的哪些方面,这是你应该问自己的第一个问题,然后再想办法做好这项工作。你也会开始考虑哪些才是自己真正感兴趣的工作。
第一种方法是深入了解你需要知道的部分。我们的团队中有自然语言处理博士,也有物理学博士,他们使用了许多不同的分析方法。所以你可以深入到一个领域,然后找到同样重视类似问题的人,或者找到可以使用同样思维来解决的类似问题。
另一种方法是尝试做一些东西。现在有很多可用的数据集。如果你正在尝试换工作,那就试着想一下,你可以在当前角色中使用哪些数据,然后以有趣的方式去解决问题。找一个借口去尝试一些事情,看看这是否真的是你想要做的。你甚至可以在家门口四处游荡,看看能找到什么。我认为这是一个很好的开始。现在有很多不同的角色都与“数据科学”有关,而且还有很多角色看起来与数据科学有关,但没有正式打上标签,因为现在还不是时候。所以,想想你真正想要的是什么。”
13.Victor Hu,QBE 保险公司数据科学主管,Next Big Sound 前首席数据科学家
“首先,你一定要学会讲故事。毕竟,你是在真正地去了解一个系统、组织或行业的基本运作原理。但你必须学会讲故事,让人们也了解这些知识,让这些知识变得真正有用。
学会把你做的东西写下来,把你的工作成果说出来 ,这是非常重要的。另外,少去担心你使用了什么算法。更多的数据或更好的数据胜过更好的算法,所以如果你能够建立一种方法,分析并获得很多好的、干净的、有用的数据,那是再好不过了!”
14.Kira Radinsky,eBay 首席科学家兼数据科学主管,SalesPredict 前 CTO 和联合创始人
“找到你感兴趣的问题。对我而言,每次开始尝试新事物时,如果只是在没有遇到任何问题的情况下进行研究,真的感觉很无聊。开始阅读资料,并尽快用它们来解决你的问题,你很快就会找到问题所在。这样将引导你去学习其他东西,它们可能是书籍、论文或人。所以,花时间解决问题,和其他人待在一起,你就会做得更好。
深入了解基础知识。了解一些基本的数据结构和计算机科学知识,了解你使用的工具和它们背后的数学原理,而不仅仅是知道如何使用它们。了解输入、输出以及内部流程,否则你就不知道在何时以及如何应用它。当然,这也取决于你正在处理什么样的问题。对于不同的问题,需要使用不同的工具。你必须知道每种工具都可以做什么,而且必须十分了解正在解决的问题,这样才能知道使用哪一种工具或技术。”
15.Eric Jonas,UC Berkeley EECS 博士后,Salesforce 首席预测科学家
“他们应该透彻地了解概率论。现阶段,我所学的任何东西,都会再映射回概率论。它提供了一个深入而丰富的基础,用于投射其他所有的东西。 E.T. Jaynes 有一本书叫作《概率论:科学的逻辑》,对我们来说,它就是一本圣经级的作品。我之所以喜欢概率生成方法,是因为它提供了两个正交轴——建模轴和推理轴。从贝叶斯角度来看,它的好处是可以独立设计每个轴。当然,它们并不是完全独立的,不过也足够接近独立,以至于你可以把它们看成是独立的。
深度学习或基于 LASSO 的线性回归系统都是机器学习的重要组成部分,它们沿着一个轴或另一个轴进行工程设计,但它们已经接近崩溃的边缘。在使用基于 LASSO 的技术时,我很难想象:‘如果我稍微改变这个参数,将意味着什么?’线性回归模型包含了线性附加高斯模型,问题是,如果我想做一些不一样的事情该怎么办?突然之间,所有这些正规化的最小二乘的模型都不奏效了。”
16.Jake Porwar,DataKind 创始人兼执行董事
“我认为牢固的统计学背景是一个先决条件,因为你需要知道自己在做什么,并了解你所构建的模型代表了什么含义。另外,我的统计学课程还讲授了很多关于道德的内容,这些是我们一直在思考的内容。你总是希望你的成果能够被应用到工作当中,你可以给任何人提供算法,给某人一个基于拦截盘查数据的模型,但为什么要这么做?最终结果会怎样?这就像是发明新技术一样,你必须考虑风险和收益,因为你要为自己的东西负责。
无论你来自哪里,只要了解你所使用的工具,那么这就是你能做的最好的事情。我们都是科学家,而且我不只是在谈论设计产品。我们总结有关外部世界的结论,而这就是统计学——收集数据来证明假设或创建外部世界的运作模型。如果你只是盲目地相信那个模型的结果,那是很危险的,因为那代表了你对世界的理解,结果有多少瑕疵,你对世界的理解就有多少缺陷。
总而言之,要学习统计学,并进行深度思考。”
总结
“Data Scientists at Work”一书展示了世界顶级数据科学家如何在各种行业和应用中工作,每个人都利用自己的专业领域知识、统计数据和计算机科学,创造出巨大的价值和影响力。
数据正在以指数级的速度生成,现在比以往任何时候都更需要那些能够理解数据并从中提取价值的人。如果你渴望成为下一代数据科学家,那么这些来自前辈们的经验教训将助你一臂之力。
英文原文:
https://www.linkedin.com/pulse/16-useful-advices-aspiring-data-scientists-james-le
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/54452.html 。
数据分析
2018-05-27 18:26:00
译者 | Liu Z Y编辑 | Natalie微信公众号 | AI 前线(ID:ai-front)
撰写本文时,正是我在 Quantum Inventions 的 数据科学家 实习即将结束前的最后一天。现在,我坐在笔记本屏幕前,回首过去这几个月的学习之旅,感慨万千。 到了最后,在旅程结束后,问题仍然存在:你学到了什么?那是你想要的吗?
请原谅我作为一名物理学家,搞物理的都笃信这点:提出正确的问题,通过正确的推理,来寻求真理。事实上,提出正确的问题,无疑是重要的数据科学家(稍后将解释)。
为了让你对本文有一个概观,本篇文章主要分三步部分:实习之前、实习期间和实习之后,让你了解我的学习历程。你可以根据你当前的学习阶段,随意跳到本文的任何部分,那让我们现在就开始吧。
在实习开始之前
我仍然清楚地记得,我在 2017 年 11 月期末考试后的第二天就开始阅读教材:《统计学导论:基于 R 应用》(An Introduction to Statistical Learning — with Applications in R),这是我在非常基础的统计学层面第一次接触机器学习。 AI 前线注:
该书中文版链接:https://3clm.jd.com/product-detail.htmlsku=26581237226
英文版链接:https://3clm.jd.com/product-detail.htmlsku=19727401
我一掌握这些概念之后,我就开始学习 Andrew Ng 在 Coursrea 上教授的机器学习课程,这门课程非常流行。事情并不像起初看起来那么容易,但是 Andrew Ng 总是能够吸引人们的注意力,尽管他讲授的概念非常复杂,但他简化了这些概念,其他人都能够消化。我想这就是让我真正迷恋机器学习的方式。试试吧,你会发现这个流行词“机器学习”并不像它听上去那么复杂。我敢打赌!
同时,我还学习了 人工智能 的另一个重点领域——深度学习。为了让大家了解看似陌生的术语,请看一下神经网络的解释,以及如何使用神经网络来计算任何函数。如果你阅读完我建议的文章之后,你像我一样,需要某种可视化来理解神经网络是怎么工作的,请访问这个网址 [1](见文末)。在这个网页中,你点击“Play”按钮,就可以观察神经网络是如何进行分类和回归的。很酷不是么?
在我于 2017 年 12 月开始实习之前,所有的阅读、做事和学习都已经准备好了。
在实习期间
Quantum Inventions 专注于通过利用其集成的移动应用套件,为消费者、企业和政府提供移动智能。它们还提供了企业物流和分析平台。我是该公司的第一位加入研发和分析团队的数据科学家实习生。
在最初几天里,我被介绍给公司里出色的同事,见识了业内各种通信术语,以及正在进行的令人兴奋的项目。我最喜欢实习的一件事就是,作为实习生,公司给了我信任和自由,我得以选择我感兴趣的项目,并为之全力以赴!
让我感到吃惊的是,我才意识到,我是这个项目的先驱者,因为之前并没有人做过这个项目。当没人做些事的时候,就会有人去研究,这就是我所感激之处,尽管这项研究存在不确定性和困难。为什么这么说?很简单,因为我有机会从零开始体验真正的数据科学工作流程(如果不是全部的话)。
请允许我在本文中,简要地列出我所经历的工作流程,因为这些都是我在数据科学领域中建立的基础。我希望这些能为你提供某些帮助。
1. 了解业务问题
所选项目是关于短期高速公路旅行时间的预测。但是,就像我所说的,提出正确的问题对数据科学家来说非常重要。要在项目完成之前提出很多问题,以真正地理解真正的业务问题,无论是可用的数据源,还是项目的最终目标(即使我离开项目之后)等等。从本质上来说,我们的目标是,让新加坡高速公路的行驶时间的预测比目前的基线估计法更准确。
2. 收集数据源
接手这个新项目之后我感到很兴奋,开始着手从数据库和同事那里收集数据源(基本就是在办公室四处走动,询问关于数据源的问题)。收集正确的数据源,就类似于你从不同网站抓取数据以便进行数据预处理的情况一样。这项工作很重要,因为它可能会影响你在后期阶段建立的模型的准确性。
3. 数据预处理
要知道,真实世界的数据很脏。我们不能寄希望于 Kaggle 提供格式良好的、清洗过的数据。因此,数据预处理(其他人可能会称之为数据整理或数据清洗)至关重要,以至于我无法再强调它的重要性了。数据预处理是最重要的阶段,因为它可以占据整个工作流程的 40%~70%,只是为了清理将要提供给你模型的数据。 输出质量是由输入质量决定的。(Garbage in, Garbage out)
我喜欢数据科学的一点就是,你必须对自己诚实。当你不知道自己哪里无知,而你认为预处理的数据已经足够干净,并准备好为你的模型提供数据时,那么就有风险了:用错误的数据构建正确的模型。换言之,如果数据在技术上与你拥有的领域知识相符的话,你要始终试着质疑自己,要严格审查数据,检查整个数据集中是否存在其他异常值、缺失或不一致的数据。
在我错误地将错误数据输入模型之后,我就对此特别小心,只是因为预处理步骤中存在一个简单的缺陷。
4. 构建模型
经过一番研究之后,我为项目提出了四个模型,分别是支持向量回归(Support Vector Regression,SVR)、多层感知器(Multilayer Perceptron,MLP)、长短期记忆网络(Long Short Term Memory,LSTM)和状态空间神经网络(State Space Neural Networks,SSNN)。为简洁起见,你可以在网络上找到上述模型的详细说明。
对我来说,从头开始构建不同的模型是一个陡峭的学习曲线,因为我当时还在 MOOC 和教科书中学习。幸运的是,Scikit-learn 和 Keras(带有 TensorFlow 后端)帮我解决了这个问题,因为很容易在 Python 中习得快速模型原型及实现。此外,我还学习了如何优化模型,并使用几种技术对每个模型的超参数进行微调。
5. 评估模型
为了评估每个模型的性能,我主要使用了以下的一些指标: 平均绝对误差(Mean Absolute Error,MAE); 均方误差(Mean Squared Error,MSE); 可决系数(Coefficient of Determination(R2))。
在这个阶段,重复步骤 3~5 次(可互换),直到确定最佳模型,足以超过基线估计值。
实习之后
实习肯定重新激发了我对数据科学的热情,我很感激我的工作能给未来的工作留下了一些吸引力。研究和开发阶段、与不同利益相关者沟通所需的技巧、用数据解决业务问题的好奇心和热情(此处仅举几例)都有助于我对这一领域产生兴趣。
数据科学这一行业还很年轻,关于这一行业的职位描述,对某些像我们这样的求职者而言,似乎有些模糊而朦胧。如果你不具备所需的所有技能,这很正常,因为大多数职位描述都理想化了,以符合雇主的最佳期望。
如果你有疑问,你只需从 MOOC、书籍和文章(我现在仍然这样做)中学习基础知识,并将你所学到的东西应用到你的个人项目或实习中去。要耐心些,因为学习是需要时间的。要享受你的学习过程,因为……
当你有疑问时,从 MOOCs、书籍和文章 (我现在还在做的) 中学习基本原理,并将你所学到的东西运用到你的个人项目或实习中。要有耐心。学习之旅的确需要时间。津津有味地学习你的旅程。因为…
到了最后,在旅程结束后,问题仍然存在:你学到了什么?那是你想要的吗?
感谢你的阅读。我希望本文能够为你提供一些简要的(并非详尽的)数据科学工作流程和我的学习过程的文档。
原文链接 :
https://towardsdatascience.com/my-first-data-scientist-internship-7f7aa2ee4040
[1] http://playground.tensorflow.org/#activation=relu®ularization=L2&batchSize=10&dataset=circle®Dataset=reg-plane&learningRate=0.01®ularizationRate=0.001&noise=50&networkShape=4,2&seed=0.94867&showTestData=false&discretize=false&percTrainData=90&x=true&y=true&xTimesY=false&xSquared=true&ySquared=true&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=regression&initZero=false&hideText=false
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/53748.html 。
数据分析
2018-05-26 11:32:00
本篇是合集文章,主要供各位童鞋系统学习和日后复习使用。本篇是旧篇中的“如何直观地理解过拟合与欠拟合的那些事”,“分层抽样与交叉验证”及新篇“模型性能度量那些事”的合集,如已看过旧篇的童鞋可以直接跳到第三部分。

在上前几期中,我们曾谈到过在我们希望借助统计学习方法,能够在现有的数据当中掌握规律,从而能够对未来/未知进行预测控制。虽然是说从现有的数据当中掌握规律,但是很显然地,我们的重心还是在于 预测 上。
既然我们是在做预测,不可避免地,就存在对错的问题,就存在这预测准确率的问题。 若是用了精度不够的模型,轻则可能影响生产,重则也是有可能造成事故 ~当年,要是孔明先生不能准确预测东风,就是不是大事可成,而是万事休矣~
那当然,预测精准率高不仅仅指的是,通过学习得到这个模型对已有的数据有很好的预测能力, 更重要的是对未来,未知的数据也能够有很好的预测能力 。但是在具体的执行层面,由于我们并没有未来的数据,为了能够充分评价模型的性能,因此我们一般可以会把现有的数据集简单划分为两个部分: 一部分数据用作训练集,进行模型训练;剩下的数据用作测试集,用于模型性能评估。 (具体的划分比例需要根据实际情况进行调整,一般的做法,我们会将大约60% ~ 80%的数据用于训练,剩下的样本用于测试)。
其实,我们需要把数据划分为训练集合测试的原因很好理解,如果我只有一个训练数据集合,无论是模型训练还是模型测试,都是在训练集上执行的话,这就有点类似于运动会上, 咱们既当运动员又当裁判,这事儿怎么看都透着这么点诡异了。
一般地,我们把在训练集上的计算得到误差称之为 训练误差 ,在测试集上计算得到的称为 测试误差 (也称作为 泛化误差 )。一般来说,我们通过比较测试误差的高低从而进行模型的选择。
举个简单例子说明,例如我们在研究客户流失,在集合D中我们有1000个样本,我们利用随机抽样的方法从中抽取800个样本作为训练集,剩下的200个作为测试集。划分出集合后,我们就可以在训练集S上进行模型训练,再在测试集T上评估结果。假如在训练集中,我们有700个样本被正确分类,那么训练集的正确率就有700/800*100%=87.5%,而在测试集中,假如我们只有150个样本被正确分类,那么测试集的正确率绩则是150/200*100%=75%.
虽然,一般来说,训练集的准确率都是高于测试集,但是,我们认为训练集测预测准确率不能很好地评估模型的预测能力,直观地说,就类似上面所说这样会带来‘即是裁判又是运动员的问题’。进一步地说,这样很可能会导致过拟合的问题。
让我们再看看如下的例子,对包含10个样本的数据集进行线性回归,分别构建多项式:M=1,M=3,M=5以及M=9( 注M=9,因为含有常数项的话,实际上已经包含有10个参数)


(1)首先,我们选择了一个一次项的回归模型,我们拟合出一条直线,可以看到数据拟合的效果并不好,不但与训练数据偏差较远,而且变动情况也没有很好的拟合出来,可以想象得到,该模型无论是在训练集上还是在测试集上,误差都比较大。由于变量考虑不足或者对模型形式估计不足, 这种对训练数据基本特征都不能够很好拟合的情况,我们称之为“欠拟合” 。
(2)进一步地,当我们选取M=3的时候,尽管拟合曲线并没有能够完美拟合出所有的点,但已基本能够把数据趋势很好地拟合出来,基本能够反映出自变量与因变量的关系, 该模型在训练集以及测试集的误差可能都比较低,这个状态相对合适。
(3)接下来,我们进一步考擦,当我们选取M=6的时候,我们发现曲线的拟合效果进一步提高,已经非常接近实际数据;当最后,我们选择M=9,可以发现拟合曲线穿过所有的样本点,效果达到最好状态,训练误差为0。尽管,这是在训练集当中最好的状态,但是正因为把样本数据学习得太好了,将会导致我们的泛化能力大大的下降, 要知道在我们的训练集中,也是存在噪声的 ! 这种把训练集中数据所有特性(包括噪声特性)都学习起来的状态,我们称之为‘过拟合’。 过拟合状态往往在测试集的数据上都表现都要比训练集效果差得多;
实际上,当我们选择M=3的时候,就已经把训练数据的基本特征学习到了,并且这个时候模型也相对简单,因此我们可以选取多项式(M=3)作为最终选择。
从上面的例子,我们可以看到,随着模型复杂度的提高(例如更多的参数),训练误差也会随之减少,直至趋向于0(甚至等于0)。但对于测试误差来说,则不是, 一开始随着模型复杂度的增加,测试误差逐渐降低,直至模型符合现实数据情况达到最低,如果在这个基础上模型复杂度继续增加,那么测试误差就会从最低点又开始增大。
下图展示了模型复杂度与模型误差之间的关系。
从上图,我们就可以明显看出,模型复杂度并不是越高越好。实际上,模型越复杂,出现“过拟合”的可能性就越大,因此一般而言,我们更喜欢“简单”的模型,而这种思想确实又与众所周知的“ 奥卡姆剃刀原理 ”是不谋而合的。
“奥卡姆剃刀原理”是有14世纪逻辑学家奥卡姆的威廉所提出,简单来说就是 “如无必要,勿增实体” 。而放在统计学习领域里面,我们则可以翻译为 “若有两个预测能力相当的模型时,我们应该选择其中较为简单的一个” 。
一般来说,欠拟合的问题比较清楚明了,不外乎是由于所选择的特征不足够或者所选择的学习算法学习能力不够强大。相反,过拟合的问题就比较复杂了,很多时候我们并不清楚问题是否由过拟合引起,或者说过拟合所带来的问题有多严重,因为我们总是不可能避免过拟合的出现。因此,怎们选进行合适的模型选择就变得重中之重。
因此综合来说,为了能准确评估模型性能,我们就可以把整个数据集集分成两个部分,一部分用于训练模型,得到估计参数(训练集);另一部分用于评估模型误差,得到准确率(测试集)
更进一步,在有些实践当中,如在分类问题上,我们往往在事先不知道那种算法是最优的,并且不同的算法里面也包含大量的需要人为设定的超参数。在这些情况下,我们往往需要再划分多一个验证集,用于选择具体超参数,因此也可以把数据集划分为训练集,验证集以及测试集。
步骤:
(1)首先按照一定比例划分为 广义训练集A 以及 测试集T ;
(2)由于我们还需要一个验证集,所以我们再从广义训练集A再按比例划分 训练集S 以及 验证集V ;
(3)我们在训练集S上分别采用不同的算法/参数得出模型,再利用验证集V评估各个模型的性能。经过这一步, 我们已经得到了最优的算法/参数配置 ;
(4)根据得到的最优配置,我们在广义训练集A上(即S+V)重新构建模型,得到最终模型;
(5)把最终模型用于测试集T检验结果,进行评估测试。
注意点:
a):在步骤(3)中,利用随机方法把广义训练集A直接划分为训练集S以及验证集V我们一般称之为 留出法 ,这里的划分方法不但可以使用随机抽样也可以选择分层抽样,这样可以一定程度保持分布的一致性;
b):针对留出法只是直接切割划分,可能会为模型带来一定的不确定性,因此这阶段我们可以选择 交叉检验(Cross Validation,简称CV) 进行代替;
c):可以在第四步中的广义训练集A得到的模型作为最终模型,也可以在确认算法及超参数的配置后,用整个数据集(A+T)作为最终模型。

1留出法(Hold out)与分层抽样
留出法就是咱们在上期文章介绍的进行对训练集和测试集进行的划分方法。
上期内容: 如何直观地理解过拟合与欠拟合那些事~
留出法的意思就是直接将总数据D划分为两个对立集合,训练集S以及测试集T,我们有S+T=D,以及S交T等于空集;
举个简单例子说明,例如我们在研究客户流失,在集合D中我们有1000个样本,我们利用随机抽样的方法从中抽取800个样本作为训练集,剩下的200个作为测试集。
划分出集合后,我们就可以在训练集S上进行模型训练,再在测试集T上评估结果。假如在训练集中,我们有700个样本被正确分类,那么分类的正确率就有700/800*100%=87.5%,而在测试集中,假如我们只有150个样本被正确分类,那么分类的正确率绩优150/200*100%=75%.
但实际上,这样的做法是存在一定的问题的。 由于我们采取的是完全随机抽样的方法, 这就可能会由于抽样划分的问题而改变了原有的数据分布。
例如在上述1000个样本中,其中有200名客户被标记为流失,800名客户被标记为普通客户。
接下来,我们随机抽取数据集D中的800个样本作为训练集,200个样本作为测试。但是由于抽样的问题, 其中有100名流失客户被分在了训练集,另外的100名客户被分在了测试集。
让我们在回顾一下分布比例,原本在数据集D中,流失客户的分布比例是20%,而经过划分后,我们在训练集中的流失比例只有12.5%,而在测试集中流失比例达到50%,显然,我们的数据分布与原有的数据分布发生了极大的改变, 而这很有可能给我们的模型训练以及评估带来非常大的隐患。
因此,为了避免这种情况,在我们使用留出法进行训练集测试集划分的时候,也会采用分层抽样的方法。
回到原来的例子,我们可能从200个流失客户中随机抽取80%放到训练集,20%放到测试集;再从800个非流失客户中抽取80%放到训练集,剩下20%又放回到测试集。值得注意的是,划分训练集以及测试集的方法是多样的,我们完全可以通过抽样方法的结合, 帮助我们更好的决定训练集以及测试集的组成 ;
除了结合抽样方式,另外一种改进策略被称为 “重复抽样” 。它的思想是这样的,考虑到我们只进行一次随机抽样划分训练集与测试集可能会有存在较大的不稳定性,因此我们就将抽样结果重复p次,最后把p次结果进行加和求平均。
2交叉验证(Cross Validation)
虽然留出法可以通过分层抽样解决数据分布不等的问题,但是由于我们需要拿出一部分数据作为测试, 因此总有部分的数据不能用于构建模型 ,而一种更好的选择是 交叉验证 ,一般也简称 CV 。
交叉验证法是一个将整体数据集平均划分为k份,先取第一份子集数据作为测试集,剩下的k-1份子集数据作为训练集进行一次试验;之后再取第二份子集数据,剩下的k-1份子集数据在进行一次试验,不断往复,最后重复k次的过程, 一般我们称之为k折交叉检验,交叉检验是我们进行参数调整过程中非常重要的一个方法。
一般我们常用十折交叉检验,不妨我们设定 k=10 进行举例: 首先我们把总数据集划分为10份,分别成D1,D2,… …,D10; 首先选择D1数据集作为测试集,D2,…D10作为训练集。在训练集上构建模型,在测试集上进行模型评估,得到评估记过O1; 之后选择D2数据集作为测试集,D1,D3,…D10作为训练集。在训练集上构建模型,在测试集上进行模型评估,得到评估记过O2; 分别抽去D3,D4,…,D10作为测试集,一共重复10次,并得到10个结果:O1,O2,…,O10; 将得到10个结果:O1,O2,…,O10加和取平均,作为最终评估结果O。

以上过程,我们称之为10折交叉检验。一般而言,在平常的使用中,10折交叉检验比较常见,当然也会有5折交叉检验,3折交叉检验。
更进一步地,类似于留出法可以采取重复抽样,对于交叉检验来说同样也存在着划分方式的不同情况,因此我们也可以采用不同的划分方式重复进行交叉试验的方法,例如,我们利用不同的划分方式划分数据5次,每次都是划分为10折,那我们就称之为5次10折交叉试验
特别地,交叉验证还有一种特殊情况,称之为留一交叉验证(leave one Out)。 它是指,我们令样本划分次数k等于数据集合D的样本数量n,即对样本集合D划分为n份子集,每份子集只包含一个样本。这个方法的优缺点都十分的明显,优点点我们每次的训练集都与原始数据集非常接近,并且也能做到训练集与测试集是对立的,这样可以保证我们得到的结果相对比较准确。但相对而言,采取这样的方式也意味着我们的计算开销会大大增加。

在之前,我们讨论了关于模型评估的那些事。我们已经知道要准确评估模型的性能,我们需要对数据划分训练集及测试集,那么在本期分享当中,我们将进一步为大家详细介绍模型的评估指标。
1
回归任务的性能度量
1.平均绝对误差MAE
平均绝对误差(MAE,Mean Absolute Error),或被称为L1范数损失,作为评估指标来说现在用得比较少。
2.均方误差MSE
均方误差(MSE,Mean Squared Error),是我们最常用的性能评估指标是.
实际上,均方误差其实就是求得我们模型预测值和实际值的偏差,因此模型的均方误差越小越好。值得一提的是,对回归模型有印象的同学其实也会发现,这是我么利用最小二乘法求解回归问题时的损失函数。
3.均方根误差RMSE
均方误差(RMSE,Root Mean Squared Error)
均方误差的开方,也是经常使用的模型评估指标。从MAE,MSE、再到RMSE,都是衡量我们模型预测与实际偏差的度量,直观地来说,以上的指标越小越好。但是上述指标有一个问题是,这是一个“比较型”的指标,也即是通过均方误差,我们可以知道哪个模型的偏差最小,但是我们并不知道这个模型是否足够的好,而且 这个指标的大小明显和数据的数量级有关系 。
例如我们构建了一个回归模型预测广州市区的房价,模型的RMSE为2000,我们认为模型效果是可以接受的,这是因为对于均价在40000的房价预测中,2000的偏差只是其中的5%。但是,假如我们是构建了一个回归模型预测国内某个均价在5000的小县城的房价时,模型的RMSE为2000明显是不可以接受的,因为偏差已经占到均值的40%了。
4. 决定系数
因为MAE,MSE以及RMSE的局限性,在传统的线性回归中,我们往往会使用决定系数 对模型进行评估。
关于决定系数的详细内容我们已在前面的文章中详细介绍( 统计挖掘那些事-9个相关R先生的故事(理论+动手案例) ),这里不再复述。但值得注意的是决定系数看上去似乎不再受到数据量级的局限,但是相比于MSE等指标, 决定系数只能评估对线性模型的拟合程度 ,因此对于可能构建了非线性模型的算法来说(例如神经网络),我们还是需要使用RMSE进行评估。
2
分类任务的性能度量
1.准确率和错误率
对于分类任务来说,最常见的准确率和错误率。
模型的错误率:
模型的准确率:
其中 为示性函数,但函数中内容为真时,函数结果取值为1,否则为0.
2.查准率,查全率和F值
模型的准确率和错误率是最常用的指标,但是有时候仅仅使用模型的准确率和错误率并不足够。为了说明这一点,我们以二分类问题为例,假设我们建立了一个客户影响响应模型
表  客户影响活动响应分析预测矩阵
预测客户响应情况
TrueFalse
实际客户影响情况TrueTP(真正例)FN(假反例)
FalseFP(假正例)TN(真反例)
对于模型评估,可以采取一些常用的指标进行判读。
(1)模型准确率(Accuracy)
(2)模型查准率(Precision)
模型查准率又被成为精确率。正如上面所说, 我们更加关心此次营销活动中对客户的响应预测是什么样的情况 ,因此,这里引入模型精确率这个指标,它主要反映了我们对目标类别的预测准性。例如,建模人员提供了一份100人的客户响应名单,精确率研究的是在这份名单中有多少客户是真正响应营销活动的。
(3)模型查全率(Recall)
模型查全率又被称为查全率。既然我们已经可以通过精确率把我们的焦点放在关注的类别上,那么分析工作是不是就可以结束呢?回到本案例中,假设又得到了一份100个用户响应名单,其中的精确率也非常高,有90人真正响应了营销活动,精确率达到90%。但问题是,如果最终响应情况是有1000人响应,那么我们就只是发现响应群体中的9%,很明显这个结果是不能接受的。因此, 可以使用召回率这个指标来衡量我们是否能够将目标情况“一网打尽” 。
需要值得注意的是,我们固然希望能够得到模型的查准率和查全率都比较高,但是 模型的查全率和查准率往往是相互制约的 ,要提高查准率,往往会降低查全率,而要提高查全率则往往会降低查准率。而要综合考虑模型的查准率和查全率,我们可以借助P-R曲线。
如下图所示 P-R曲线的纵坐标和横坐标分别是模型的查准率和查全率 。要绘制P-R曲线,我们可以先对模型的预测样本按照准确率从高到低排序。接下来依次把判断阈值从高到低调整,之后按顺序阈值的调整顺序依次计算不同阈值的查准率和查全率,最后把计算结果绘制到图上就得到了下图的结果。事实上,随着阈值的逐渐降低,就是模型查准率下降而查全率上升的过程。
图 西瓜书中P-R曲线示意图
有一点需要值得注意的是,在实际的项目当中P-R曲线往往不会这么平滑,而且很有可能是取不到(0,1)以及(1,0)两个点。 借助于P-R曲线,我们能够很好地对模型进行综合评估。当多个模型进行比较时,例如模型A的P-R曲线完全“包住”了另一个模型C的P-R曲线,则可以认为模型A的性能要优于模型C。但是当两个模型的P-R曲线发生交叉时,例如模型A和模型B的P-R曲线由于发生了交叉,则可能难以判断,这要根据我们实际的情形进行取舍。如果我们对模型的查准率有较高的要求,则可能选择模型A,而当我们对模型的查全率有较高的要求,则可能选择模型B。
不过另一角度来讲,如果本身我们对模型查准率和查全率没有明显的“偏好”,实际上我们其实可以使用曲线下面积作为取舍 ,曲线下面积越大,模型的综合性能越好 。值得注意的是,作为对面积的替代,我们还可以利用“平衡点”(BEP,Break-Even Point),即产准率=查全率的取值点进行比较。在上图中,模型A的平衡点要高于模型B,因此我们可以认为模型A要优于模型B。
(4)F Measure
某些情况下,只考虑平衡点可能过于简单,那么我们可以使用F1 Measure。
实际上 F1值就是查准率和查全率的调和平均数 ,调和平均数常用于用在相同距离但速度不同时,平均速度的计算。一段路程,前半段时速60公里,后半段时速30公里〔两段距离相等〕,则其平均速度为两者的调和平均数时速40公里。
但也正如我们前面所说的,有些场景下,我们对查准率和查全率的重视程度是不一样的。例如在体检过程中,我们希望尽可能发现体检者是否患有某种疾病,此时我们更加重视查全率。又例如在商品推荐中中,我往往不希望过于打扰客户,则会更加重视查准率。因此我们可以在F1值的计算中引入权重 , 不妨使用 代表查全率相比查准率的重要性 ,有加权调和平均的计算如下:
显然当 =1时,,就是 指标。
3. ROC与AUC
通常,我们的算法模型也会为我们生成预测概率。一般我们可以选择一个阈值,当预测概率大于这个阈值时,我们将其划分为正类。通常我们习惯选取0.5作为阈值,当然,根据实际的任务需要,如果我们更加关注查准率,则可以适当调高阈值。相反,如果我们更加关注查全率,则可以适当调低阈值。
受试者工作特征曲线 (Receiver Operating Characteristic Curve,简称ROC曲线),与P-R曲线类似,我们根据预测概率对分类结果进行排序。之后从高到低依次选择阈值对样本进行分类,并计算出“真正例率”和“假正例率”。因为开始的时候,阈值最高,因此时所有的样本均被划分为负类,无论是“真正例率”和“假正例率”均为0.随着不断调低阈值,直至所有的样本均被划分为正类,这时无论是“真正例率”和“假正例率”均为1.真正例率和假正例率的定义如下:
一个典型的ROC曲线如下图所示, 其中图上的对角线对应于随机猜测结果,曲线下面积越大,代表模型效果越好 ,显然如果模型A的ROC曲线完全包住另一个模型B的ROC曲线,我们可以说模型A的分类效果要优于模型B。最理想的模型是曲线直接去到(0,1)这个点,此时曲线下面积达到最大,为1.比较客观的比较方法同样可以使用面积,AUC曲线下的面积越大,说明模型的分类效果越好,我们把ROC曲线下的面积称之为AUC(Area Under ROC Curve)
当然,因为在实际情况AUC(Area Under ROC Curve)是各点链接而成,一般出现不了上图这般平滑的曲线,通常我们得到的ROC曲线如下图所示。

本文为专栏文章,来自:浩彬老撕,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/53027.html 。
数据分析
2018-05-25 06:00:00
一、背景
Facebook数据泄露事件一度成为互联网行业的焦点,几百亿美元市值瞬间蒸发,这个代价足以在地球上养活一支绝对庞大的安全团队,甚至可以直接收购几家规模比较大的安全公司了。
虽然媒体上发表了很多谴责的言论,但实事求是地讲,Facebook面临是一个业界难题,任何一家千亿美元的互联网公司面对这种问题,可能都没有太大的抵抗力,仅仅是因为全球区域的法律和国情不同,暂时不被顶上舆论的浪尖罢了。但是全球的趋势是越来越重视隐私,在安全领域中,数据安全这个子领域也重新被提到了一个新的高度,所以笔者就借机来说一下数据安全建设。(按照惯例,本文涉及敏感信息的部分会进行省略处理或者一笔带过。)
二、概念
这里特别强调一下,“隐私保护”和“数据安全”是两个完全不同的概念,隐私保护对于安全专业人员来说是一个更加偏向合规的事情,主要是指数据过度收集和数据滥用方面对法律法规的遵从性,对很多把自身的盈利模式建立在数据之上的互联网公司而言,这个问题特别有挑战。有些公司甚至把自己定义为数据公司,如果不用数据来做点什么,要么用户体验大打折扣,要么商业价值减半。GDPR即将实施,有些公司或将离场欧洲,就足见这件事的难度不容小觑。当然市场上也有一些特别推崇隐私保护的公司,他们很大程度上并不能真正代表用户意愿,而只是因为自家没有数据或缺少数据,随口说说而已。
数据安全是实现隐私保护的最重要手段之一。对安全有一定了解的读者可能也会察觉到,数据安全并不是一个独立的要素,而是需要连同网络安全、系统安全、业务安全等多种因素,只有全部都做好了,才能最终达到数据安全的效果。所以本文尽可能的以数据安全为核心,但没有把跟数据安全弱相关的传统安全体系防护全部列出来,对于数据安全这个命题而言尽可能的系统化,又避免啰嗦。另外笔者也打算在夏季和秋季把其他子领域的话题单独成文,譬如海量IDC下的入侵防御体系等,敬请期待。
三、全生命周期建设
尽管业内也有同学表示数据是没有边界的,如果按照泄露途径去做可能起不到“根治”的效果,但事实上以目前的技术是做不到无边界数据安全的。下图汇总了一个全生命周期内的数据安全措施:
四、数据采集
数据泄露有一部分原因是用户会话流量被复制,尽管有点技术门槛,但也是发生频率比较高的安全事件之一,只是是很多企业没有感知到而已。下面从几个维度来说明数据采集阶段的数据保护。
流量保护
全站HTTPS是目前互联网的主流趋势,它解决的是用户到服务器之间链路被嗅探、流量镜像、数据被第三方掠走的问题。这些问题其实是比较严重的,比如电信运营商内部偶有舞弊现象,各种导流劫持插广告(当然也可以存数据,插木马),甚至连AWS也被劫持DNS请求,对于掌握链路资源的人来说无异于可以发动一次“核战争”。即使目标对象IDC入侵防御做的好,攻击者也可以不通过正面渗透,而是直接复制流量,甚至定向APT,最终只是看操纵流量后达到目的的收益是否具有性价比。
HTTPS是一个表面现象,它暗示着任何互联网上未加密的流量都是没有隐私和数据安全的,同时,也不是说有了HTTPS就一定安全。HTTPS本身也有各种安全问题,比如使用不安全的协议TLS1.0、SSL3,采用已经过时的弱加密算法套件,实现框架安全漏洞如心脏滴血,还有很多的数字证书本身导致的安全问题。
全站HTTPS会带来的附带问题是CDN和高防IP。历史上有家很大的互联网公司被NSA嗅探获取了用户数据,原因是CDN回源时没有使用加密,即用户浏览器到CDN是加密的,但CDN到IDC源站是明文的。如果CDN到源站加密就需要把网站的证书私钥给到CDN厂商,这对于没有完全自建CDN的公司而言也是一个很大的安全隐患,所以后来衍生出了Keyless CDN技术,无需给出自己的证书就可以实现CDN回源加密。
广域网流量未加密的问题也要避免出现在“自家后院”——IDC间的流量复制和备份同步,对应的解决方案是跨IDC流量自动加密、TLS隧道化。
业务安全属性
在用户到服务器之间还涉及两个业务安全方向的问题。第一个问题是账号安全,只要账号泄露(撞库&爆破)到达一定数量级,把这些账号的数据汇总一下,就必定可以产生批量数据泄露的效果。
第二个问题是反爬,爬虫的问题存在于一切可通过页面、接口获取数据的场合,大概1小时爬个几百万条数据是一点问题都没有的,对于没有彻底脱敏的数据,爬虫的效果有时候等价于“黑掉”服务器。账号主动地或被动地泄露+爬虫技术,培育了不少黑产和数据获取的灰色地带。
UUID
UUID最大的作用是建立中间映射层,屏蔽与真实用户信息的关系链。譬如在开放平台第三方应用数据按需自主授权只能读取UUID,但不能直接获取个人的微信号。更潜在的意义是屏蔽个体识别数据,因为实名制,手机号越来越能代表个人标识,且一般绑定了各种账号,更改成本很高,找到手机号就能对上这个人,因此理论上但凡带有个体识别数据的信息都需要“转接桥梁”、匿名化和脱敏。譬如当商家ID能唯一标识一个品牌和店名的时候,这个原本用于程序检索的数据结构也一下子变成了个体识别数据,也都需要纳入保护范畴。
五、前台业务处理
鉴权模型
在很多企业的应用架构中,只有在业务逻辑最开始处理的部分设置登录态校验,后面的事务处理不再会出现用户鉴权,进而引发了一系列的越权漏洞。事实上越权漏洞并不是这种模型的全部危害,还包括各种K/V、RDS(关系型数据库)、消息队列等等,RPC没有鉴权导致可任意读取的安全问题。
在数据层只知道请求来自一个数据访问层中间件,来自一个RPC调用,但完全不知道来自哪个用户,还是哪个诸如客服系统或其他上游应用,无法判断究竟对当前的数据(对象)是否拥有完整的访问权限。绝大多数互联网公司都用开源软件或修改后的开源软件,这类开源软件的特点是基本不带安全特性,或者只具备很弱的安全特性,以至于完全不适用于海量IDC规模下的4A模型(认证、授权、管理、审计)。
外面防御做的很好,而在内网可以随意读写,这可能是互联网行业的普遍现状了。主要矛盾还是鉴权颗粒度和弹性计算的问题,关于这个问题的解决方案可以参考笔者的另外一篇文章 《初探下一代网络隔离与访问控制》 ,其中提到Google的方法是内网RPC鉴权,由于Google的内网只有RPC一种协议,所以就规避了上述大多数安全问题。
对于业务流的鉴权模型,本质上是需要做到Data和App分离,建立Data默认不信任App的模型,而应用中的全程Ticket和逐级鉴权是这种思想下的具体实现方法。
服务化
服务化并不能认为是一个安全机制,但安全却是服务化的受益者。我们再来温习一下当年Bezos在Amazon推行服务化的一纸号令:
1)所有团队今后将通过服务接口公开他们的数据和功能。
2)团队必须通过这些接口相互通信。
3)不允许使用其他形式的进程间通信:不允许直接链接,不允许直接读取其他团队的数据存储,不支持共享内存模式,无后门。唯一允许的通信是通过网络上的服务接口调用。
4)他们使用什么技术并不重要。HTTP,Corba,Pubsub,自定义协议 – 无关紧要。贝索斯不在乎。
5)所有服务接口无一例外都必须从头开始设计为可外部化。也就是说,团队必须规划和设计能够将接口展示给外部开发人员。没有例外。
6)任何不这样做的人都会被解雇。
服务化的结果在安全上的意义是必须通过接口访问数据,屏蔽了各种直接访问数据的途径,有了API控制和审计就会方便很多。
内网加密
一些业界Top的公司甚至在IDC内网里也做到了加密,也就是在后台的组件之间的数据传输都是加密的,譬如Goolge的RPC加密和Amazon的TLS。由于IDC内网的流量比公网大得多,所以这里是比较考验工程能力的地方。对于大多数主营业务迭代仍然感觉有压力的公司而言,这个需求可能有点苛刻了,所以笔者认为用这些指标来衡量一家公司的安全能力属于哪一个档位是合理的。私有协议算不算?如果私有协议里不含有标准TLS(SHA256)以上强度的加密,或者只是信息不对称的哈希,笔者认为都不算。
数据库审计
数据库审计/数据库防火墙是一个入侵检测/防御组件,是一个强对抗领域的产品,但是在数据安全方面它的意义也是明显的:防止SQL注入批量拉取数据,检测API鉴权类漏洞和爬虫的成功访问。
除此之外,对数据库的审计还有一层含义,是指内部人员对数据库的操作,要避免某个RD或DBA为了泄愤,把数据库拖走或者删除这种危险动作。通常大型互联网公司都会有数据库访问层组件,通过这个组件,可以审计、控制危险操作。
六、数据存储
数据存储之于数据安全最大的部分是数据加密。Amazon CTO Werner Vogels曾经总结:“AWS所有的新服务,在原型设计阶段就会考虑到对数据加密的支持。”国外的互联网公司中普遍比较重视数据加密。
HSM/KMS
业界的普遍问题是不加密,或者加密了但没有使用正确的方法:使用自定义UDF,算法选用不正确或加密强度不合适,或随机数问题,或者密钥没有Rotation机制,密钥没有存储在KMS中。数据加密的正确方法本身就是可信计算的思路,信任根存储在HSM中,加密采用分层密钥结构,以方便动态转换和过期失效。当Intel CPU普遍开始支持SGX安全特性时,密钥、指纹、凭证等数据的处理也将以更加平民化的方式使用类似Trustzone的芯片级隔离技术。
结构化数据
这里主要是指结构化数据静态加密,以对称加密算法对诸如手机、身份证、银行卡等需要保密的字段加密持久化,另外除了数据库外,数仓里的加密也是类似的。比如,在 Amazon Redshift 服务中,每一个数据块都通过一个随机的密钥进行加密,而这些随机密钥则由一个主密钥进行加密存储。用户可以自定义这个主密钥,这样也就保证了只有用户本人才能访问这些机密数据或敏感信息。鉴于这部分属于比较常用的技术,不再展开。
文件加密
对单个文件独立加密,一般情况下采用分块加密,典型的场景譬如在 《互联网企业安全高级指南》 一书中提到的iCloud将手机备份分块加密后存储于AWS的S3,每一个文件切块用随机密钥加密后放在文件的meta data中,meta data再用file key包裹,file key再用特定类型的data key(涉及数据类型和访问权限)加密,然后data key被master key包裹。
文件系统加密
文件系统加密由于对应用来说是透明的,所以只要应用具备访问权限,那么文件系统加密对用户来说也是“无感知”的。它解决的主要是冷数据持久化后存储介质可访问的问题,即使去机房拔一块硬盘,或者从一块报废的硬盘上尝试恢复数据,都是没有用的。但是对于API鉴权漏洞或者SQL注入而言,显然文件系统的加密是透明的,只要App有权限,漏洞利用也有权限。
七、访问和运维
在这个环节,主要阐述防止内部人员越权的一些措施。
角色分离
研发和运维要分离,密钥持有者和数据运维者要分离,运维角色和审计角色要分离。特权账号须回收,满足最小权限,多权分立的审计原则。
运维审计
堡垒机(跳板机)是一种针对人肉运维的常规审计手段,随着大型IDC中运维自动化的加深,运维操作都被API化,所以针对这些API的调用也需要被列入审计范畴,数量级比较大的情况下需要使用 数据挖掘 的方法。
工具链脱敏
典型的工具脱敏包括监控系统和Debug工具/日志。在监控系统类目中,通常由于运维和安全的监控系统包含了全站用户流量,对用户Token和敏感数据需要脱敏,同时这些系统也可能通过简单的计算得出一些运营数据,譬如模糊的交易数目,这些都是需要脱敏的地方。在Debug方面也出过Debug Log带有CVV码等比较严重的安全事件,因此都是需要注意的数据泄漏点。
生产转测试
生产环境和测试环境必须有严格定义和分离,如特殊情况生产数据需要转测试,必须经过脱敏、匿名化。
八、后台数据处理
数仓安全
目前 大数据 处理基本是每个互联网公司的必需品,通常承载了公司所有的用户数据,甚至有的公司用于数据处理的算力超过用于前台事务处理的算力。以Hadoop为代表的开源平台本身不太具备很强的安全能力,因此在成为公有云服务前需要做很多改造。在公司比较小的时候可以选择内部信任模式,不去过于纠结开源平台本身的安全,但在公司规模比较大,数据RD和BI分析师成千上万的时候,内部信任模式就需要被抛弃了,这时候需要的是一站式的授权&审计平台,需要看到数据的血缘继承关系,需要高敏数据仍然被加密。
在这种规模下,工具链的成熟度会决定数据本地化的需求,工具链越成熟数据就越不需要落到开发者本地,这样就能大幅提升安全能力。同时鼓励一切计算机器化&程序化&自动化,尽可能避免人工操作。
对于数据的分类标识、分布和加工,以及访问状况需要有一个全局的大盘视图,结合数据使用者的行为建立“态势感知”的能力。
因为数仓是最大的数据集散地,因此每家公司对于数据归属的价值观也会影响数据安全方案的落地形态:放逐+检测型 or 隔离+管控型。
匿名化算法
匿名化算法更大的意义其实在于隐私保护而不在于数据安全(关于隐私保护部分笔者打算另外单独写一篇),如果说对数据安全有意义,匿名化可能在于减少数据被滥用的可能性,以及减弱数据泄漏后的影响面。
九、展示和使用
这个环节泛指大量的应用系统后台、运营报表以及所有可以展示和看到数据的地方,都可能是数据泄露的重灾区。
展示脱敏
对页面上需要展示的敏感信息进行脱敏。一种是完全脱敏,部分字段打码后不再展示完整的信息和字段;另一种是不完全脱敏,默认展示脱敏后的信息,但仍然保留查看明细的按钮(API),这样所有的查看明细都会有一条Log,对应审计需求。具体用哪种脱敏需要考虑工作场景和效率综合评估。
水印
水印主要用在截图的场景,分为明水印和暗水印,明水印是肉眼可见的,暗水印是肉眼不可见暗藏在图片里的识别信息。水印的形式也有很多种,有抵抗截屏的,也有抵抗拍照的。这里面也涉及很多对抗元素不一一展开。
安全边界
这里的边界其实是办公网和生产网组成的公司数据边界,由于办公移动化程度的加深,这种边界被进一步模糊化,所以这种边界实际上是逻辑的,而非物理上的,它等价于公司办公网络,生产网络和支持MDM的认证移动设备。对这个边界内的数据,使用DLP来做检测,DLP这个名词很早就有,但实际上它的产品形态和技术已经发生了变化,用于应对大规模环境下重检测,轻阻断的数据保护模式。
除了DLP之外,整个办公网络会采用BeyondCorp的“零信任”架构,对整个的OA类应用实现动态访问控制,全面去除匿名化访问,全部HTTPS,根据角色最小权限化,也就是每个账号即使泄露能访问到的也有限。同时提高账号泄露的成本(多因素认证)和检测手段,一旦检测到泄露提供远程擦除的能力。
堡垒机
堡垒机作为一种备选的方式主要用来解决局部场景下避免操作和开发人员将敏感数据下载到本地的方法,这种方法跟VDI类似,比较厚重,使用门槛不高,不适合大面积普遍推广。
十、共享和再分发
对于业务盘子比较大的公司而言,其数据都不会是只在自己的系统内流转,通常都有开放平台,有贯穿整个产业链的上下游数据应用。Facebook事件曝光其实就属于这类问题,不开放是不可能的,因为这影响了公司的内核—-赖以生存的商业价值。
所以这个问题的解决方案等价于:1)内核有限妥协(为保障用户隐私牺牲一部分商业利益);2)一站式数据安全服务。
防止下游数据沉淀
首先,所有被第三方调用的数据,如非必要一律脱敏和加密。如果部分场景有必要查询明细数据,设置单独的API,并对账号行为及API查询做风控。
其次如果自身有云基础设施,公有云平台,可以推动第三方上云,从而进行:
1)安全赋能,避免一些因自身能力不足引起的安全问题;
2)数据集中化,在云上集中之后利于实施一站式整体安全解决方案(数据加密,风控,反爬和数据泄露检测类服务),大幅度降低外部风险并在一定程度上降低作恶和监守自盗的问题。
反爬
反爬在这里主要是针对公开页面,或通过接口爬取的信息,因为脱敏这件事不可能在所有的环节做的很彻底,所以即便通过大量的“公开”信息也可以进行汇聚和数据挖掘,最终形成一些诸如用户关系链,经营数据或辅助决策类数据,造成过度信息披露的影响。
授权审核
设置专门的团队对开放平台的第三方进行机器审核及人工审核,禁止“无照经营”和虚假三方,提高恶意第三方接入的门槛,同时给开发者/合作方公司信誉评级提供基础。
法律条款
所有的第三方接入必须有严格的用户协议,明确数据使用权利,数据披露限制和隐私保护的要求。像GDPR一样,明确数据处理者角色和惩罚条约。
十一、数据销毁
数据销毁主要是指安全删除,这里特别强调是,往往数据的主实例容易在视野范围内,而把备份类的数据忽略掉。
如果希望做到快速的安全删除,最好使用加密数据的方法,因为完整覆写不太可能在短时间内完成,但是加密数据的安全删除只要删除密钥即可。
十二、数据的边界
数据治理常常涉及到“边界”问题,不管你承不承认,边界其实总是存在的,只不过表达方式不一样,如果真的没有边界,也就不存在数据安全一说。
企业内部
在不超越网络安全法和隐私保护规定的情况下,法律上企业对内部的数据都拥有绝对控制权,这使得企业内部的数据安全建设实际上最后会转化为一项运营类的工作,挑战难度也无非是各个业务方推动落地的成本。但对规模比较大的公司而言,光企业内部自治可能是不够的,所以数据安全会衍生出产业链上闭环的需求。
生态建设
为了能让数据安全建设在企业内部价值链之外的部分更加平坦化,大型企业可能需要通过投资收购等手段获得上下游企业的数据控制权及标准制定权,从而在大生态里将自己的数据安全标准推行到底。如果不能掌控数据,数据安全也无从谈起。在话语权不足的情况下,现实选择是提供更多的工具给合作方,也是一种数据控制能力的延伸。
十三、ROI和建设次第
对于很多规模不大的公司而言,上述数据安全建设手段可能真的有点多,对于小一点公司即便什么事不干可能也消化不了那么多需求,因为开源软件和大多数的开发框架都不具备这些能力,需要DIY的成分很高,所以我们梳理一下前置条件,优先级和ROI,让数据安全这件事对任何人都是可以接受的,当然这种情况其实也对应了一些创业空间。
基础
账号、权限、日志、脱敏和加密这些都是数据安全的基础。同时还有一些不完全是基础,但能体现为优势的部分:基础架构统一,应用架构统一,如果这两者高度统一,数据安全建设能事半功倍。
日志收集
日志是做数据风控的基础,但这里面也有两个比较重要的因素: 办公网络是否BeyondCorp化,这给数据风控提供了极大地便利。 服务化,所有的数据调用皆以API的形式,给日志记录提供了统一的形式。
数据风控
在数据安全中,“放之四海皆准”的工作就是数据风控,适用于各类企业,结合设备信息、账号行为、查询/爬(读)取行为做风控模型。对于面向2C用户类,2B第三方合作类,OA员工账号类都是适用的。具体的策略思想笔者打算在后续文章《入侵防御体系建设》中详细描述。
作者简介
赵彦,现任美团点评集团安全部高级总监,负责集团旗下全线业务的信息安全与隐私保护。加盟美团点评前,曾任华为云安全首席架构师,奇虎360企业安全技术总监、久游网安全总监、绿盟科技安全专家等职务。白帽子时代是Ph4nt0m Security Team的核心成员,互联网安全领域第一代资深从业者。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2018-05-24 22:17:00
编译 | 周小璐
编辑 | Vincent
微信公众号 | AI 前线(ID:ai-front)
通过本文,你可以对 数据科学 及其几大分支,包括 商业分析 、 数据分析 、 商业智能 、先进分析、机器学习和 AI 有初步的认识。
数据科学,这个时下流行的热词,许多人曾尝试用成功案例去定义它。
谈起这个问题,我们就得从数据科学相关的其它领域说起——商业分析、 数据分析 、商业智能、先进分析、机器学习以及最后的 AI。
我们意识到数据科学的“绝对定义”需要知道许多“数据科学”的背景才能理解,这是一个死循环……这里的假设是 统计学 家或程序员对数据科学的理解比历史学家或语言学家容易得多,因为前者已经以某种形式接触过数据科学。
基于这个假设,或许数据科学的“相对定义”更有意义,这也是本文的目的所在。
下面这个欧拉图描述了上文中提到的所有领域的关系,每种颜色代表了不同的领域(混合的颜色代表交叉学科),横坐标代表了时间轴,每块区域代表了使用案例。
图 1:每个方形区域的位置、形状和颜色表示了概念上的相似性和不同点,不是复杂度
信息量很大,我们从头开始。
商 业
为避免将这个问题过于简单化,我们假设“商业”这个词不需要定义,一些商业行为的例子如下: 商业案例研究 定性分析 初始数据报告 可视化报告 仪表盘创建 销售预测
以上这些都在蓝色的区域中
数 据
这里才是欧拉图真正的开始,如果我们将数据加入到这幅图中,我们会得到 2 个大的领域以及它们的交叉学科,总共 3 个部分。
有了初始的术语选择,我们就可以将最后四个商业和数据的交叉术语放进来了,也就是目前图中的紫色区域。由于“初始数据报告”,“创建仪表盘”和“销售预测”都是数据驱动的商业行为。
与之相对的是“商业案例研究”和“定性分析”,这两个术语虽然也在商业范畴之内,但是基于过去的知识、经验和行为,也很重要,但你很快就能知道这不是真正的数据科学。
分析 VS. 分析学
分析指的是将你的问题分隔为易处理的小块,每一块都可以单独研究,并监测各块之间的关系。
另一方面,分析学就是逻辑和计算的推理应用于分析中获得的组成部分。并且在这个过程中,人们会寻找模式,还会研究未来这种模式的用途。
所以,相比业务和数据,我们更应该好好使用商业分析和数据分析。
时 间
在进一步讨论之前,我们来引入时间轴,这对后面的部分很重要。
我们会使用三个状态——过去,现在和未来。
图中有一条竖线代表着对于任何分析学问题中现在的时刻,竖线左边代表向过去的分析学,竖线右边代表着预测分析。
分析中最后的两个部分就可以加入到图中来了。
“销售预测”在右边,从名字就可以看出是一个向前看的分析过程。很明显,“定性分析”是利用你的直觉和经验规划下一步行动,所以是另一个向前看的术语。
数据科学
对于大多数读者来说,下面将进入本文的高潮部分。数据科学是一个不能没有数据的领域,所以它会完全处在图中数据分析的区域内。
那么它和商业分析的关系是怎样的呢?
结果就是同属于数据分析和商业分析的部分必然是数据科学。
但是请注意,有的数据科学过程并不直接是商业分析,但却是数据分析。比如“钻井作业优化”需要数据科学工具和技术,属于数据科学家的日常工作。但是在石油行业中,我们不能将其和商业分析关联起来。
为了更好的理解这一点,可以引入“相关定义”的概念。“数字信号处理”属于数据分析的行为,但不是数据科学,也不是商业分析。数据,程序和数学都在数据科学中发挥着作用,但扮演着不同的角色。
和上面保持一致,我们使用时间轴来结束这一部分——数据科学同时存在于过去和未来的部分。
这也带来了另一个问题:有没有一个领域是只面向过去的?
商业智能
商业智能是分析和报告过去的数据的过程。
它是面向过去的吗?不一定,但是商业智能中不包含预测分析。回归、分类和其它所有的典型的预测方法都是数据科学的一部分,但不属于商业智能。这也决定了那条竖线的位置。
并且,商业智能是数据科学的真子集,所以当人们在处理描述性统计,过去事件的报告或可视化问题时,他的行为既属于商业智能,也属于数据科学。
机器学习和 AI
这里的定义会有一点模糊,因为解释这两个概念会让本文失去重点,而且关于机器学习的概念有很多资料,特别是在 KDnuggets 上。
人工智能 (AI)是机器模仿自然(人类)智能所表现出来的任何的智能形式,比如计划、学习、解决问题等。
机器学习(ML)是机器在没有被明确编程去这样做时,预测结果的能力。
ML 是 AI 的一种方式,但是两者经常被混淆,因为根据目前为止人类研究的研究成果,ML 是唯一能达到 AI 的可行路径。
在图中,这两个术语在以下位置。
机器学习完全属于数据分析,因为其没有数据就不能被执行。它和数据科学也有交叉,因为它是数据科学家最好用的工具之一。最后,它也有商业智能的属性,涉及预测性分析的部分除外。
ML 在数据科学中的例子是“客户留存”,“防欺诈”和“创建实时仪表盘”(也是 BI 的一部分)。代表性的例子包括“语音识别”和“图像识别”,既属于又不属于数据科学,所以我们将其放在了边界位置。
总结起来就是:ML 完全属于 AI,但 AI 有一部分领域甚至和商业、数据分析完全没有关系,比如“符号推理”。
先进分析
在我们的分析中最后一块领域是先进分析,相比数据科学,这更像是一个市场术语。它经常被用来描述“不是那么容易被处理”的分析。主观上来说,对于一个新手来说,本图中所有的信息都是先进性的。虽然不是最好的术语,但很适合用来汇总本文中所有提到的“合适的”术语。
去除了 AI,加上先进分析,就是下图。
引用文中的术语,我们关于先进分析的分析就完成了。 英文原文:https://www.kdnuggets.com/2018/05/data-science-machine-learning-business-analytics.html
本文为专栏文章,来自:AI前线,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/52994.html 。
数据分析
2018-05-22 22:05:00
今天(5月31日)下午,京东金融宣布推出两款服务于证券行业的产品:京东金融 大数据 消费指数及京东天灝投资数据平台、京东金融量化策略开发平台。
京东金融消费指数是基于其大数据业务推出,包含家电、计算机、手机数码等12个大消费行业价格指数和销售指数,现已登陆彭博全球终端。
京东天灝投资数据平台是京东金融与天灝资本合作推出。平台为投资者提供了计算机、手机数码、食品饮料等12个大消费行业中68个子行业销售和价格指数。
该平台具有三大特点:一、连续性,每月公布月度数据;二、精度高,对行业数据进行了深度挖掘;三、频率快,针对价格指数,未来将提高到每周发布。
至于京东金融量化平台,是京东金融开发的服务证券投资的策略生产型产品,目前免费为证券投资方提供支持。
一方面,量化平台能为各类投资者提供量化策略生产及回测服务;另一方面,京东金融自身的大数据消费指数及数据平台的指数产品还能为量化平台提供独有的量化因子,为策略开发者提供更多策略选择。
值得注意的是,该平台目前主要功能是为投资者提供测试服务,尚未进入任何交易系统,不提供程序化交易,不会对市场秩序形成影响。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-05-31 17:22:00
今天我们就温柔地手撕一下国内目前装逼最成功的媒体之一,「今日头条」。
01
搜狐、新浪、腾讯、网易,这四大传统门户的新闻版块虽然日趋式微,但余威尚在。而「今日头条」从2012年上线至今不过短短3年,用户量已经突破3亿。中国网民总量不过6亿左右,几乎每两个人就有一个在用它。
「今日头条」的巨大成功 ,显然不是「正面刚」的结果,而很大程度上得益于它的差异化定位: 基于用户兴趣和 数据挖掘 的个性化新闻推荐。
现实生活中,大部分新闻都是垃圾,所谓的热门你又可能不感兴趣。报纸洋洋洒洒好几页,你真看的也就几个豆腐块儿,很浪费时间。怎么办? 个性化推荐。根据你自己的独特喜好,从海量数据中挑选出你真正关注的内容,大大节省你的时间。
比如同样是娱乐新闻,我就只想看我们家邓超,别的一概不关心,哪怕是娘娘相关的也不看,推都不要给我推。完美。
然而,理想是丰满的,现实是骨感的。目前「今日头条」上被推荐最多的新闻,除了所谓的全民热点外,基本上主要是一些情色擦边球。
(图片来自微博)
我自己也试着刷了几次,有些新闻标题看起来真的是low得不要不要的: 俄罗斯富三代街头花1万卢布引诱妹子进奔驰脱光抚摸
孪生姐妹共侍一夫让父母害臊
实拍男子与情妇车震被老婆抓现行
原配死死揪住正在和老公逛街的小三
他闻妻子内衣后怒告其通奸
(图片来自今日头条)
对「个性化推荐」有所了解的盆友马上就说了:这些内容都是根据你的喜好推荐的,你之所以能看到黄色新闻,完全是因为你经常看黄色新闻。是你自己不要脸,跟人家「今日头条」木有关系。说得好,友情送一个截图梗。
(图片来自《傲骨贤妻》,侵权就删)
实话实说,光看这些羞羞的标题,我还真是想点开看看呢。可惜作为一个资深标题党,我深深地明白点开后面对的不过是内心无尽的空虚。
而且作为一只严谨的产品狗,我为了避免智能算法误会我的人品,我真的是一条都没点开过。这一点,我已经成年的老婆可以作证。那些自认为特别正经的同学,不妨亲自打开「今日头条」刷新几下看看。
不过话说回来,哪个新闻客户端不推荦段子活跃气氛啊,号称「有态度」的网易不也满屏的都是「女性高潮那点事」「明星为何爱劈腿」「富豪跑车睡嫩模」「老婆怀孕就出轨」么?网民就是喜欢看呀,没办法。
但问题不在于情色,而在于「今日头条」主打的是「个性化推荐」。为什么根据用户的偏好精准定制之后,看到的仍然是铺天盖地的情色内容呢?
一言以蔽之,因为媚俗。
02
王婆自己吹嘘得再凶,瓜甜不甜还是要买的人说了算。「今日头条」为了吸引并留住大量用户,就不得不走媚俗的路线。
作为「今日头条」的核心竞争力,做好个性化推荐系统需要关注两个方面:一是提升用户的客观行为指标,比如推荐新闻的点击率。二是提升用户的主观满意度,即让用户觉得推荐结果更靠谱。简单来说,就是既让用户喜欢看,又让用户感觉爽。
先说客观指标,怎么让用户喜欢看。
什么样的新闻点击率高?
用户个人感兴趣的。
用户自己对什么内容感兴趣?
还不知道。
不知道用户对什么感兴趣怎么办?
先推荐一批试试看。
先推荐哪一批呢?
其他用户比较喜欢的。
其他用户普遍比较喜欢什么呢?
色情的。
因此机器学习最大的坑:
就是俗称「马太效应」的现象。
豆瓣推荐电影、亚马逊推荐图书,都会有一个比较长的时间去积累足够的用户数据,从而优化推荐结果。
但新闻是一个时效性非常强的东西,转瞬即逝,在推荐时很难针对每条新闻去做计算,只能把主题相似的新闻都看成是同一类。你喜欢看广州女大学生援交,那你估计也喜欢看双胞胎姐妹双飞,嗯。
可有人会说,如果你是个正经人,那你一开始有本事别喜欢看援交啊,你看点别的新闻不好嘛?说得好,看一下「今日头条」的推荐列表。来,正经人,说实话,你会打开哪一条?
(图片来自今日头条)
媚俗并不是推荐系统的错,特别是在一个全民都俗不可耐的社会环境里。在这种前提下做新闻的个性化推荐,哪怕满屏都是lowB情色也是可以理解的。
但相比于「今日头条」吹嘘自己算法多牛逼,新浪微博的自黑精神就显得非常可爱。用户发现「你可能感兴趣的人」并不感兴趣,怎么办?不妨男的统一推荐美女用户,女的统一推荐美妆博主。
(图片来自微博)
当然上面这图只是在开玩笑,却也能说明所谓的「个性化推荐」在实践中并不像理论上描述得那么简单好用。
「非装逼勿看」
稍微装逼一点来说的话,比较了解recommendation system的盆友可能会提到:
评价algorithm的指标除了accuracy还有一个很重要的是serendipity,留出一部分固定的机会去推荐用户可能不那么感兴趣的新标签来试错,就能解决机器学习中过拟合over-fitting的问题了。
可惜在data sparsity这么严重的cold start场景里,explore & exploit平衡到底能有多大作用其实是很令人怀疑的。
何况保证推荐结果多样性就需要扩大召回率,这往往以牺牲准确率为代价,在提高推荐点击率KPI的驱使下这种努力在实践中很难不被掣肘。
再说主观指标,怎么让用户感觉爽。
「用户体验」是一个非常虚幻的概念,很难界定。
好在心理学上对「用户满意度」有过一个比较直白的操作化定义。一共是3个问题?
你觉得是否满意?
你下次是否还愿意用?
你是否愿意推荐给朋友?
回答的肯定程度越高,满意度越高。
而关于个性化推荐系统的用户满意度,有过两个比较有趣的心理学研究。以下描述仅说明逻辑,细节不保证完全一致。
研究一:
告诉你「谁推荐的」,
比「推荐什么」更重要。
让所有人分别对一份完全相同的电影列表评分,然后把参与者随机分成3组,根据他们每个人的喜好来推荐其他影片。
第1组人得到的推荐是基于电影热门排行榜给出的,第2组人是专业影评人给出的,第3组人是 人工智能 算法给出的。
结果不出意外,第3组人的满意度更高,认为推荐结果更符合自己的品味。然而现实是残酷的,实验人员给这3组人反馈的所谓推荐结果,不过是同一份随机生成的内容完全相同的电影列表而已。
研究二:
告诉你「为什么推荐」,
比「推荐什么」更重要。
和上一个研究类似。先让所有人分别对一份完全相同的音乐列表评分,然后推荐系统会根据用户的偏好进行推荐。
参与者随机分成2组,第1组人只能看到推荐结果,第2组人的推荐结果上还附有推荐原因。
结果显示,虽然使用了完全一样的推荐算法,第2组人的满意度却显著高于第1组人,他们觉得附有原因的推荐结果,看起来更可信。
在明白了人类的有限理性是多么容易被扭曲之后,再回到「今日头条」的例子:
它为什么要在推荐结果明显不理想的情况下向用户抛出「个性化定制新闻」的噱头?
因为有些心理错觉,并不是你说破了就会失效。恰恰相反,这些小伎俩必须得说出来,才会奏效,所以才更要说出来。
可是冒着被打脸的风险,推着满屏幕的low文,还硬是要宣称自己走的是「个性化推荐」的高大上路线,到底图什么呢?
一言以蔽之,为了钱。
03
业内数据,「今日头条」年收入是十亿量级,其中约90%来自广告。而广告费中有一半以上,来自两个土豪行业:地产、汽车。这俩行业广告商的主要特点,一是人傻,二是钱多。
钱多容易理解,大宗商品交易,流水动辄千亿,从牙缝里剔出来一点儿肉丝,就够互联网各大媒体吃好几年了。而说人傻,并不是真傻,只是对所谓的互联网广告没那么懂,也没那个动力去弄懂,反正不差钱儿嘛。
今日头条吸引用户的招牌是「个性化推荐」,完全一样的逻辑,到了广告商这里,忽悠的术语就成了所谓的「千人千面」。特别形象,以前是所有人都看一样的内容,现在一千个观众心里有一千个哈姆雷特。
用户看到的都是自己喜欢的内容,包括广告也是个性定制的,爽了。
您投放的广告都展示给您的目标受众,不用花冤枉钱,爽了。
我们通过自己的技术提高资源的变现效率,赚点广告费,也爽了。
三赢啊。
土豪一听,来吧,拿钱砸死你,数钱到手软。至于到底做得多好呢?土豪们其实没那么关心。天天在央视投广告的那些金主,他们会操心这一个亿砸5秒钟广告出来,公司利润到底能上升几个点嘛?根本不会,也没法衡量。
微信朋友圈广告,那逼格够高吧,真的是小母牛坐火箭,牛逼上天了。憋足了劲玩儿饥渴营销,真能给广告商带来什么实际效果么?不知道。但肯德基今天上了微信,你要是麦当劳,你上不上?你麦乐鸡块要是不上,以后在上校鸡块面前,还怎么做鸡?
今日头条也是一样,概念炒热了,故事讲圆了,身段提高了,牌子打响了。众人抬轿,水涨船高。实际上做成什么水平,反而不那么重要。
一来你不懂,你也不用太懂。二来别人肯定比我还差,我也不用做多好,就已经真的是出类拔萃了。实际上哪家新闻客户端的信息不是筛选过的啊,但农夫山泉先说了自己有点甜,别家再说就没劲了,还显得怪不要脸的。
市场上占先机,远比技术实力上真有什么过人之处,更重要。因为大部分人都是外行人,他们不懂也体会不到技术,而只会为营销手法买单。并不是说内在实力不重要,而是说占了先机的人起码还有机会修炼内在,而那些闷头只修炼内功的兄弟,可能没等出关就饿死了。
所以从这个角度来说,「今日头条」的商业运营思路,还真的是既合理又有效,所以能取得现在的成功,也就顺理成章了。
04
好了,花了5分钟,看了将近4000字,这厮都说了点啥呢?
1、「今日头条」所谓的「个性化新闻推荐」基本上是噱头大于实质。
2、它这样做,主要是为了抬高自身媒体价值,从广告商那里忽悠更多钱。
3、而它越是宣称个性化定制,大部分傻白甜用户就会越觉得定制结果个性化。
完毕。 来源:科学家种太阳
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2015-12-18 00:07:08
所谓 概率分布 ,是指随机变量的取值与该取值发生概率所构成的分布。概率分布描述了一个随机变量的所有取值与其相应概率值之间的关系。它可以分为离散型概率分布和连续型概率分布(离散型及连续型随机变量分类见上一篇)。
离散型概率分布主要有以下三种: 二项分布 泊松分布 超集合概率分布
今天介绍的是离散型随机变量的二项分布。
在许多试验中,结果往往只有两个。例如:检查产品的质量,其结果只有两个:合格与不合格;对某种洗发液消费者的调查结果是:喜欢和不喜欢;拨打一次电话的结果:接通与没接通。如果试验的结果多于两个,但我们只关心其中一个结果,也可以视为只有两个结果,例如,调查教育程度时,结果有文盲、小学、初中、高中、大学,但我们只对大学感兴趣,则这个试验的结果也只看作两个:大学和不是大学。
通常把上述试验的两个结果(或可以看作两个结果的)分别用“成功”和“失败”来代替。一般用“成功”表示我们感兴趣的结果,“失败”表示我们不感兴趣的结果。成功的概率用p表示,失败的概率用q=1-p表示。这一类的试验我们称为伯努利试验。
如果进行n次伯努利试验,则“成功”的次数是一个随机变量,其概率分布被称为二项分布。二项分布的函数表达式为:
其中n为试验次数;x为n次试验中“成功”的次数;P为每次试验中“成功”的概率;q=1-p为每次试验中“失败”概率。如果随机变量X服从二项分布,记为X~B(n,p)。称为n和p是二项分布的参数,即通过n和p可以确定一个二项分布。
例子:已知某设备厂生产的产品中约有10%的次品,且次品的出现是随机的。求:
(1)随机抽取5件产品,其中有2件是次品的概率;
(2)随机抽取5件产品,最多有1件次品的概率;
解:按照前面的解释,我们可以将次品定义为“成功”且p=0.1。设X表示实验中出现次品的数量,则X~B(5, 0.1)。
为了方便二项分布的计算, 统计学 家编制了二项分布表,表中将不同的n和p值列出。当给定X值时,可以直接从表中查出概率值。部分二项分布表如下:
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-08-13 13:21:00
深度学习 必备基础
深度学习发展至今已然有几个年头了,上个世纪九十年代的美国银行率先使用深度学习技术做为手写字体识别,但深度学习的惊艳登场并没有留住它一时的辉煌, 直到2012年深度学习这个领域才开始渐入人们的眼帘。可以说我们现在拥有着绝佳的学习机会,世界顶级的会的议论文,各 大数据 库公开的数据源以及开源的力量已经让我们站在了巨人的肩膀上去成长。下面就给大家分享一份深度学习入门指南,让大家能更快更好的加入深度学习这个璀璨的舞台。
必备技能1-Python
python我就不必多说啦吧,有多方便大家用过了都知道,这里强调这点是因为,现在无论是公开的论文还是代码基本在深度学习这个领域都是python为主流的,我在学习的过程中一个最重要的点就是学习别人的代码,通过把高手的代码debug一遍我们才能真正的懂一个技术的原理,那么在这个领域里高手们的代码很多都是python版本的。更重要的一点是,我们入门这个领域肯定不会自己动手一步一步的去实现所有需要的技术代码,一个最直接的学习方法就是结合开源的框架,那么可以说深度学习的开源框架基本都是python接口的,能用这些开源框架是我们学习的一个最基本的手段啦,所以重要的事情说三遍,python!python!python!
必备技能2–线性代数,微积分
很多同学该觉得很头疼了。。。,怎么有是数学啊,没错咱们深度学习需要很好的数据基础,我所说的这俩简直就是九牛一毛,但是作为我们入门来说已经够啦。其实咱们所有的深度学习是什么呢它就是一个复杂的人工 神经网络 嘛,那么要去能懂这个神经网络的原理,有 机器学习 基础的同学们肯定都知道,其实就包括了两部分嘛,前向传播和反向传播。这两部分一个最最最核心的点就是矩阵计算和梯度求导运算啦,所以说咱们要能入门这个领域,这些数学可是还要复习起来的。
必备技能3–英文阅读能力
这个还需要说啥子嘛技术都是国外搬来的,咱们要学习的肯定都是国外各路大神的作品啦,比如课程呀,论文呀等等,那么要能跟上大神们的脚步,这点肯定是不能少的吧。
必备技能4–查找资料能力
这点其实是蛮重要的,也就是我们在学习的过程中,要积累一些数据库还有好的学习资源,比如公开的代码呀,这也就要我们经常去逛逛技术博客,github呀看看有木有一些适合咱们学习的东东,找到有价值的学习资源比咱们自己埋头苦学更有价值的。
避开常见误区
深度学习这个领域的坑可以说还是蛮多的,咱们在进军的路上
一定要避开这些了。
自己挖的坑:
咱们在学习的过程中一定要循序渐进,切不可急于求成。这就像练武功一样,一味的求快求狠只能走火入门。这里我暂且认为想要入门的同学们的基础都是比较薄弱的,咱们不能跳过传统机器学习这条路直接一大步迈进深度学习这个领域中,我们起码要知道神经网络是怎么一回事。这对于咱们理解以及掌握深度学习有着重要的帮助,比如咱们第一步要做的就是去搞明白什么是前向和反向传播以及从头到尾的自己推导一遍,有了这样一个过程咱们再去学习深度学习就会轻松多啦。千万不可自欺欺人,一步还没走稳呢就着急跑去下一个知识点啦,在积累的过程中不要给自己挖坑,确保自己搞明白一个点啦再去深入到下一个点中。
掉进别人的坑:
我们在学习的路上肯定会挖掘到很多的资源,但是这些资源不可盲目学习,我们需要有一定的鉴别能力。就好比说我们跟着一个武功一般的学,怎么也不会学到哪里去,但是我们给一个武林至尊当小弟,我们学到的也不会少嘛。这就是说我们要学习的资源一定要是通过了大家的认可的,在我看来现在百度到的很多资源其实错误的地方还是蛮多的,我们尽量多关注一些国外大神的主页以及github上比较火的项目。
学习路线图
这个路线图是针对咱们要入门的同学制定的,已然成神的同学们可不使用哦。
(一)入门神经网络:
对于咱们要入门的同学来说,第一部也是最重要的一步就是能够去懂什么是神经网络以及把整体流程从头到尾的推一遍,神经网络这个东西还是蛮抽象的,这里有一个入门的课程大家可以参考下深度学习全民皆兵
把神经网络以及深度学习所需的每一个知识点都从头到尾的推了一遍还是很不错的。
(二)选择一个深度学习方向:
深度学习现在来说有两个方向比较成功,一个是自然语言处理,另一个是计算机视觉。在学习的路上,我们需要选择一个自己喜欢的方向去深入,有的同学可能会说我都想去研究个究竟,其实只要有时间这些都不是事。但是我觉得还是选择一个方向去深入比较好,无论对于研究还是工作我们不可能同一阶段去弄这两个事,所以确定好一个深度学习的方向还是很重要的。当我们选择好方向之后我们要学习的东东就确定了,对于自然语言处理我们要学习的就是RNN现在更火的是LSTM,对于计算机视觉我们要学习的就是CNN,大家如果听不懂这几个缩写,没关系的等咱们真正走到了这不的时候再去了解也来得及,这里我们只需要知道我们要两个方向可以选择。
(三)论文与代码:
对于选择好的方向我们首先要弄懂这个网络的原理,最好的办法就是边学边做,结合一个实际的项目。有的同学可能比较愁,我哪有实际项目去结合啊,其实咱们github上的每一位大神的代码咱们都可以当成是一个实际的项目呀,比如人脸检测,物体识别呀,这些公开的代码就是咱们练手的利器呀,我们首先需要从头到尾的完全理解一个找好的项目,这其中包括了很多内容了。比如学习一个深度学习框架,应用公开数据集,训练模型等等。从我自身学习的经验来说,最有价值的做法就是,在一些高端会议上找到一篇开源的而且做的事是咱们感兴趣的的论文,首先通读论文,然后对应于开源的代码开始大干一波 (就是把代码和论文对应上,确保自己完全理解),还有些需要注意的点比如说咱们一定要找最新的论文和代码,这些应该就不用我多说啦。在完成了一个项目之后,咱们就有一定功底啦,可以说咱们已经入门深度学习这个领域啦,但仅仅是入门,切不可就此止步。
干货分享
下面这些是我觉得对于入门深度学习很好的课程和工具 深度学习全民皆兵
这个很适合新手入门深度学习这个领域可以说通俗易懂。 斯坦福课程
这个只推荐咱们英文听力,以及基础很好的同学 CAFFE框架
经典深度学习框架,有很多python例子,跟着做一遍收获很大
本篇学习笔记对应 深度学习入门视频课程
本文为专栏文章,来自:唐宇迪,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/24332.html 。
数据分析
2016-10-01 12:04:00
大数据 文摘出品
作者:诗风悠存、蒋宝尚
哄女朋友最高的境界是什么?
除了用心之外,每天不重复的甜言蜜语必然是少不了的。虽然语文老师上学的时候也教了一些东西,但是日子长了必然“江郎才尽”。
大家都是混科技圈的,借助自动化的手段能不能一次性的解决问题呢?
嗯,显然是可以的。Github作为全球最大的同性交友网站,小伙伴们不仅可以在上面交流编程技巧,还能学到如何开发一个自动哄女友神器。
先附上Github地址:
https://github.com/sfyc23/EverydayWechat
这个自动给女友发送微信暖心话的项目,已经连续霸榜Github趋势榜好几天了。作者用 Python 3和Itchat微信接口开发了一款小工具,可以定时给朋友发送每日天气、提醒、每日一句。通过调用图灵 机器人 ,也可以智能自动回复信息。
操作简单且容易上手,即使是小白,只要配置好了Python环境,安装好必要的Python库,代码下载之后,只要CMD一下即可实现。
在手把手教大家操作之前,文摘菌先带大家看下效果~
首先,我定的时间是22:20,一到时间文摘菌的账号就收到了发送的信息,包括英文和中文情话。北京的天气以及在一起的多少天。
调用图灵机器人之后,两个账号便可以对话,图灵机器人还算强大,当我发送:这是个测试之后,图灵机器人回复:你不放心我吗?☹☹☹☹
注:这个小工具的项目中的天气信息来自SOJSON API接口,暖心情话来自金山词霸上面的每日一句,带英文的哟~图灵机器人使用需要申请密钥,每天免费数量只有100条。如果使用超了。可使用青云客智能聊天机器人,这个不限制次数。
手把手教学实现哄女友神器
首先,把Python安装好,并配置好环境,个人建议新手安装anaconda,具体安装教程,可自行谷歌搜索~
然后安装必要的Python库,环境配置好的同学可以直接用pip install +库名 进行安装。必须安装的库为:requests、beautifulsoup4、itchat、apscheduler、pyyaml、lxml、simplejson。记住了,小伙伴,一个库都不能少哟~
然后进入Github地址下载项目的全部文件(就是这么简单粗暴),解压过后,找到 _config.yaml 用Python IDE打开。然后进行一系列的配置~

就是这个文件
一、配置自动回复机器人。
1.开启自动回复:

将 is_auto_relay 设置为:True。
2.配置图灵机器人:

打开图灵机器人官网:http://www.turingapi.com 进行注册。
创建机器人,得到 apikey,userid。
将apikey,userid填入到 _config.yaml 文件中的:
turing_conf:
apiKey: ‘你所获取apiKey’
userId: ‘你所获取的userId’
3. 指定自动回复的好友名单:

# 指定自动回复的好友名单。
auto_reply_names:
– ‘好友1’
– ‘好友2’
注意: 只能自动回复文字类消息; 群消息自动回复还未现实。(待完成); 如果消息发送太频繁,微信会限制登录网页端登录。放心,并不会封号; 并不是对所有人自动回复,只是回复auto_reply_names中的人。 当没有图灵机器人 apikey 与 UserId,或者数量超出时。会使用备用的青云客智能聊天机器人获取数据。
二、配置定时提醒
1.开启并设置提醒时间:
如:
alarm_info:
is_alarm: True
#定时发送时间
alarm_timed: ‘9:30’
2.填写需要发送的好友。.
如:
girlfriend_infos:
– #女友微信昵称或者备注名,不能输入微信号。
wechat_name: ‘文摘菌’
#女友所在城市,用于发送天气。(可空)
city_name: ‘北京’
# 从那天开始勾搭的(可空)(最终效果为:宝贝这是我们在一起的第 111 天)
start_date: ‘2019-06-13’
# 后缀(可空)
sweet_words: ‘来自最爱你的我。’
#如果你有多个人需要发送,则参照这个样式,复制即可
#如不需要,则删除或注解下面所有的数据
– wechat_name: ‘happy’
city_name: ‘朝阳区’
start_date: ‘2018-11-11’
sweet_words: ‘来自你俊美的老公。’
然后,直接将run.py文件直接拖到命令窗口界面(视频中有演示),会出现二维码,扫描之后,实现网页登录。如下☟

发送成功如下☟
自动回复成功如下☟

注意事项: 检查是否是最新的代码,检查是否是 Python3.5+,检查依赖有没有安装完整。 先检查微信是否可登录 微信网页版,如网页端不能用,此项目也不能用。 请更新你的 itchat 为最新版本。 与微信相关的可以先去 itchat issues 是否有相似问题。 微信名只能是昵称或者备注名,不能输入微信号。
在这里,文摘菌不介绍代码逻辑,感兴趣以及有能力的同学可以去作者Github查看哟~
最后,再次给出Github地址:
https://github.com/sfyc23/EverydayWechat
本文为专栏文章,来自:大数据文摘,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/65901.html 。
数据分析
2019-07-07 16:30:00
大数据 文摘出品
作者:蒋宝尚
今天是6月8号,除了个别省份之外,一年一度的高考都会在今天结束。
据这一届的同学在知乎上爆料,这次2019年的高考数学难出了新高度。除了考到了“一朵云”,还丈量了一下同学们的艺术天赋,毕竟完美身材比例不是每个人都能够想出来的。
另外,听说还考到了柯西准则的证明,那可是研究生入学的必考题呀……
妥妥的上了微博热搜
吐槽完今年的高考数学,希望大家正视已经发生的事情,把精力用在成绩的估算,学校的选择上面。
毕竟,如果学校、专业选的好,也能够打一个漂亮的翻身仗。
“新工科”的专业成为新的报考热点
这两年,一种被称为“新工科”的专业——大数据和 人工智能 正在取代经济、金融等专业成为新的关注点。
今年也是我国高校开设大数据本科专业的第四年,而包括南京大学在内的多所顶尖院校,也从开始逐渐开启招收 人工智能 专业本科生的计划。
那么如何选择专业呢,一种观点认为,想学大数据大数据人/工智能的毕业生可以直接填报大数据、人工智能等专业,从本科就直接插入这个领域;而另一种声音认为,应该先选择数学计算机这种基础类学科,打好基础然后在步入大数据类或者人工智能专业。
社会上还有一种泼冷水的声音,认为当前的新工科专业可类比之前的电子商务专业,只是一时的“风生水起”,当同学们读完四年本科之后,或许就成了冷门专业。
那么,针对这几个问题,文摘菌从学者观点,高校设置新工科专业的模式以及人工智能专业的现状等几个方面来回答。
南京大学周志华对人工智能的理解
南京大学周志华教授算是AI领域的领军人物,他写的那本《机器学习》在学界有非常高的评价。
在去年他曾经发表过一篇文章:《创办一流大学人工智能教育的思考》非常好的提到了当前人工智能的现状:
当前人工智能有两个方向,一个是强人工智能,即希望研制出达到甚至超越人类智慧水平的人造物;
另一个是弱人工智能,即帮助人决策。这两种方向,当然弱人工智能是一种趋势,因此,模式识别、自动驾驶、图像识别等等技术才成为人工智能专业的主流。
从学科上讲,周志华的文章里也抛出了一个问题,即是人工智能是原有学科上修修补补,还是建立一个独立的学科?
对此有一个非常著名的“飞机”和鸟的例子:没有飞机的时候,想看鸟怎么飞上天,很多人都想的是说我们造一个鸟,于是就按照鸟的方式做了一个飞行器。虽然研发飞机的灵感来源于飞鸟。但是现在研究飞机显然不同于研究鸟科学。鸟科学本身很重要,但它并不是培养飞机制造者所必须掌握的科学知识,对鸟没弄清楚并不妨碍造飞机,飞机的飞行方式也不需与鸟的飞行方式相同。
提到人工智能,说的最多的是说人工智能是由数学,计算机,生物学等等组合而成,这并不是说人工智能就是由其他专业拼凑而成的。类似于大数据,比如 数据科学 ,全称叫数据科学与大数据技术。其实大数据和传统的像云计算等这些IT基础设施不一样,最大的不同点是云计算处于基础架构层面,能够参与的全都是IT人员。
而数据科学与大数据技术,更多的偏向于应用层,所以不光是技术层人能参与,应用层的人也可以参与,例如精准营销、推荐,所有这些东西都是基于数据的一些决策,因此对人才的需求不光是技术层面,还需要业务知识、 算法 、数学技能等方面的人才。
高校 大数据专业 的培养方式:多学科融合,找准方向
开设大数据专业的学校,16年底的时候只有3家,到17年3月份的时候新增了32家;第三批在18年3月猛增了248家,而在2019年有196所高校获批了大数据相关专业。之所以学校数目增长如此之多,是因为市场存在大量的需求。只有在有需求的情况下国家才会制定政策,然后学校才会响应。
教育部2019年批文
从人才培养上讲,大数据专业的培养与之前其他的专业的培养并不一样:一般的数据科学与大数据技术专业可能来自一个学校三个或者四个方面的建设,即大数据专业有可能下挂到计算机学院,也有可能隶属于数学学院,另外还有可能隶属于商学院;另外一种可能是学校单独建设一个 大数据学院 。
这种模式下,培养出的人才各有所长,例如计算机学院下培养出来的人才可能编程能力更优秀,统计学院培养出来的学生可能更擅长算法运用。
学校在开设大数据专业的时候,不会从零开始设计出全新的大数据专业。学校不会对教材和师资力量重新规划,在原有的专业体系下扩展出大数据专业,教育部对此有规定,例如大数据专业挂靠在计算机学院下面,学生必须完成教育部规定的计算机必修课,这样学生才能获得对应的学分绩点。
这种模式其实给了学生更多的选择,因为如果对算法应用感兴趣的学生,完全能够选择有统计背景的大数据专业;如果学生对大数据底层架构感兴趣,明智的选择是报考挂靠在计算机学院下的大数据专业。
人工智能专业现状:不止技术,行业内有大量潜在岗位需求
当前开设人工智能专业的学校一共有20多家,人工智能又是比较火热的专业,考生的需求非常大,所以面对供求失衡,考生也不必失望。因为当前人工智能行业的岗位需求更多的是停留在机器学习、自然语言处理、图像识别这种专业性比较强的领域。
但是,人工智能专业产生的岗位需求在未来远不止这些,就像电子商务专业,不在电子商务专业就读,并不是不能从事电子商务专业相关的岗位,像淘宝上的买家、卖家、客服这些都是与电子商务有关。所以从整个业绩上划分来说,人工智能行业的职业人员,并不局限于人工智能技术的研究,更多的是人工智能产品未来的岗位需求,因为这才是隐形的产品。
不就读人工智能专业并不意味着不能做相关的工作。虽然当前人工智能专业催生的岗位需求还没有被激发出来,但是未来不管你在什么样的人工智能场景下工作,都要对人工智能有一个基本的认知,对人工智能方向有一个基本的把握。
学科之间的界限是不断变化的
当前人工智能专业和大数据专业的出现,意味着学科之间的综合应用不断得到重视,这种界限的打破与学科之间的融合也正是一种趋势。
例如在有学校开设大数据专业出现之前,提到大数据,大家最基本的认知是大数据是由几个学科,例如计算机、数学、统计学交叉形成。但是随着不断的发展,出现了独立的大数据专业,这种出现不正是学科之间的界限不断模糊,学科之间相互重叠的过程么?所以高三毕业生在选择专业的时候要对未来的趋势有清醒的认识,以提升综合实力和综合素质为主。
数据科学的融合韦恩图
当然,当前教育部批准开设大数据专业,家校之间的质量参差不齐,在选择学校和专业的过程中,毕业生还是以学校为主,总的来说学校越好,越能获得丰富的资源。大数据专业在录取的过程中肯定分数线特别高,所以,在能选择好学校的情况下选择学校实力不是太强的大数据专业未必是明智的选择。
AI和大数据还能火多久?
针对当前人工智能领域存在大量泡沫,有不少人认为AI和大数据专业的热度也只是昙花一现,几年过后热潮消退,高校设立的AI和大数据专业也会冷却下来。
那么站在现在往回看,如果让我们穿越回蒸气革命或电气化革命的初期,当时也会有人问:“机械革命还能火几年?”“电气化革命还能火几年?”
答案显然是:会一直火下去。
原因也非常简单:“热机/电动机+能源”的效率比人力高得多。如今人类的生产和生活已经离不开了电力作为能源。
而用“电(的)脑” 替代 “人(的)脑” 的行业也并不是昙花一现,因为“电脑+能源”的效率在越来越多的方面比人脑高得多。
正如吴恩达所言,人工智能正在颠覆传统行业成为新的能源。例如在家居生活领域,智能家电已经初显威力,例如扫地机器人、小米最新的智能家居,虽然还只是雏形,但是我们可以想象到未来给我们的家居生活带来什么样的颠覆。而在出行方面呢,自动驾驶汽车是趋势;医疗领域,频频传来手术、诊断超过人类水平.的消息….
专业选择要遵从自己的内心
人工智能和大数据虽然非常热门,但是大家还是要综合考量自己的兴趣。毕竟,如果只是追赶热度,如果不喜欢,那么就没有专研下去的耐心。技能不过关仍然可能找不到工作。
最后文摘菌附上目前招收大数据专业和人工智能专业的高校名单
人工智能方向:
1.湖北大学-机器人学院
成立时间:2016年4月26日
湖南大学机器人学院院长:王耀南
2.同济大学-人工智能研究院
成立时间:2017年5月7日
3.中山大学-智能工程学院
成立时间:2017年5月11日
4.中国科学院大学-人工智能技术学院
成立时间:2017年5月28日
中国科学院自动化所所长徐波担任院长。
5.西安电子科技大学- 人工智能学院
成立时间:2017年11月2日
6.苏州大学-人工智能研究院
成立时间:2017年11月19日
凌晓峰担任苏州大学人工智能研究院院长
7.西南政法大学-人工智能法学院
成立时间:2017年12月6日
8.北京交通大学-人工智能学院
成立时间:2017年12月13日
中国人工智能学会理事、交通 数据分析 与挖掘北京市重点实验室主任于剑教授担任北京交通大学人工智能研究院常务副院长。
9.湖北工业大学-人工智能学院
成立时间:2018年1月13日
10.上海交通大学-人工智能研究院
成立时间:2018年1月18日
11.重庆邮电大学&科大讯飞-人工智能学院
成立时间:2018年2月7日
12.南京大学-人工智能学院
成立时间:2018年3月6日
南京大学计算机科学与技术系周志华教授担任院长
13.长春理工大学-人工智能学院&人工智能研究院
成立时间:2018年4月16日
人工智能学院、人工智能研究院执行院长:长春理工大学副校长杨华民。
14.清华大学&南京市-南京图灵人工智能研究院
成立时间:2018年4月20日
15.山东科技大学&腾讯云-人工智能学院
成立时间:2018年4月21日
16.河北工业大学-人工智能与数据科学学院
成立时间:2018年4月23日
人工智能与数据科学学院院长:杨鹏
17.天津师范大学-人工智能学院
成立时间:2018年4月25日
是国内第一个成立人工智能学院的师范院校。
18.哈尔滨工业大学-人工智能研究院
成立时间:2018 年5月5日
哈尔滨工业大学计算机学院院长、软件学院院长王亚东教授担任首任研究院院长。
19.天津大学/南开大学-人工智能学院
成立时间:2018 年5月16日
20.辽宁工程技术大学&腾讯云-人工智能学院
成立时间:2018年5月17日
人工智能学院院长:刘万军
21.吉林大学-人工智能学院
成立时间:2018年5月26日
22.杭州电子科技大学-人工智能学院&人工智能研究院
成立时间:2018年5月27日
人工智能学院院长:王建中教授
人工智能研究院院长:林志赟教授
23.重庆理工大学-重庆两江人工智能学院
成立时间:2018年6月9日
24.浙江理工大学-人工智能研究院
成立时间:2018年6月25日
25.清华大学-人工智能研究院
成立时间:2018年6月29日
张钹出任首任院长,姚期智担纲学术委员会主任。
清华大学人工智能研究院为校级跨学科交叉科研机构。
26.南京航空航天大学-人工智能学院&人工智能研究院
成立时间:2018年7月2日
27.南京理工大学-人工智能学院&人工智能研究院
成立时间:2018年7月2日
28.北京邮电大学-人工智能研究院
成立时间:2018年7月19日
人工智能研究院负责人由郭军副校长担任
29.北京科技大学-人工智能研究院
成立时间:2018年7月21日
30.烟台大学-人工智能研究院
成立时间:2018年7月31日
中国人工智能学会副理事长、清华大学计算机科学与技术系马少平教授担任研究院名誉院长。
31.南京邮电大学-人工智能学院
成立时间:2018年9月20日
教育部长江学者特聘教授岳东担任院长
32.福州大学-人工智能学院&人工智能研究院
成立时间:2018年10月14日揭牌
33.大连理工大学-人工智能大连研究院
成立时间:2018年10月22日
34.东南大学-人工智能学院&人工智能研究院
成立时间:2019年1月4日
联想集团首席技术官、高级副总裁芮勇出任兼职院长
35.西安交通大学-人工智能学院
成立时间:2019年1月22日
首任院长:孙剑
36.中国人民大学高人工智能学院
成立时间:2019年4月22日
图片可以上下滑动哟
大数据专业方向
第1、2、3批共283所获批高校完整名单:
图片可以上下滑动哟
最新一批高校完整名单:
数据科学与大数据技术专业(196所)
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2019-07-06 16:30:00
我们真的了解在我们构建的 ML模型 中发生了什么吗?让我们来探索吧。
在我之前的博客中,我们看到了对XGBoost、LightGBM和Catboost的比较研究。通过这种分析,我们得出结论,catboost在速度和准确性方面都优于其他两个。在这一部分中,我们将深入探讨catboost,探索catboost为高效建模和理解超参数提供的新功能。
对于新读者来说,catboost是由Yandex团队在2017年开发的一种开源梯度增强 算法 。它是一种机器学习算法,允许用户快速处理大型 数据集 的分类特征,这与XGBoost和LightGBM不同。 Catboost可用于解决回归、分类和排序问题。
作为数据科学家,我们可以轻松地训练模型并进行预测,但是,我们经常无法理解这些奇特算法中发生的事情。这是我们看到离线评估和最终生产之间模型性能差异巨大的原因之一。现在是我们不再将ML视为“黑匣子”并且在提高模型准确性的同时重视模型解释的时候了。这也有助于我们识别数据偏差。在这一部分中,我们将看到catboost如何通过以下功能帮助我们分析模型并提高可视性:
特征重要性
你为什么要知道它? 删除不必要的特征以简化模型并缩短训练/预测时间 为您的目标价值获取最具影响力的功能并操纵它们以获得业务收益(例如:医疗保健提供商希望确定哪些因素会导致每位患者患某种疾病的风险,以便他们可以直接通过针对性药物解决这些风险因素)
除了选择特征重要性的类型之外,我们还应该知道我们想要使用哪些数据来查找特征重要性 – 训练、测试或完成数据集。选择一个在另一个上有利有弊,但最后,您需要决定是否要知道模型依赖于每个特征进行预测的多少(使用训练数据)或该特征对性能的贡献程度模型对未见数据的影响(使用测试数据)。我们稍后将看到,只有一些方法可用于查找未用于训练模型的数据的特征重要性。
如果您关心第二个并假设您拥有所有时间和资源,那么找到特征重要性的最原始且最可靠的方法是训练多个模型,一次留下一个特征并比较测试集上的性能。如果性能相对于基线(当我们使用所有功能时的性能)发生很大变化,则意味着该特征非常重要。但是,由于我们生活在一个需要优化精度和计算时间的实际环境中,这种方法是不必要的。以下是一些智能方法,其中catboost可让您找到适合您模型的最佳功能: cb.get_feature_importance(type= "___")
"type" possible values:
- PredictionValuesChange
- LossFunctionChange
- FeatureImportance
PredictionValuesChange for non-ranking metrics and LossFunctionChange for ranking metrics
- ShapValues
Calculate SHAP Values for every object
- Interaction
Calculate pairwise score between every feature
PredictionValuesChange
对于每个要素,PredictionValuesChange显示预测在特征值更改时平均变化的程度。重要性值越大,平均值越大,如果此特征发生变化,则预测值会发生变化。
优点: 计算成本低廉,因为您无需进行多次训练或测试,也不会存储任何额外信息。您将获得标准化值作为输出(所有重要性加起来将为100)。
缺点 :它可能会给排名目标带来误导性结果,它可能会将groupwise特性置于顶部,即使它们对最终的损失值有一点影响。
LossFunctionChange损失函数变化
为了获得这个特征的重要性,catboost简单地采用了在正常情况下(当我们包括特征时)使用模型获得的度量(Loss函数)与没有此特征的模型之间的差异。差异越大,特征越重要。在catboost文档中没有明确提到我们如何在没有特征的情况下找到模型。
优点和缺点 :这对于大多数类型的问题都很有效,这与预测值变化不同,在这种情况下,您可以获得排名问题的误导性结果,同时,它的计算量很大。
Shap Values
 
https://github.com/slundberg/shap
SHAP值将预测值分解为每个要素的贡献。它测量特征对单个预测值的影响并比较基线预测(训练数据集的目标值的平均值)进行比较。
shap值的两个主要用例:
1.特征的对象级贡献 shap_values = model.get_feature_importance(Pool(X_test, label=y_test,cat_features=categorical_features_indices),
type="ShapValues")
expected_value = shap_values[0,-1]
shap_values = shap_values[:,:-1]
shap.initjs()
shap.force_plot(expected_value, shap_values[3,:], X_test.iloc[3,:])
 
https://github.com/slundberg/shap
2.整个数据集的摘要(整体特征重要性) shap.summary_plot(shap_values,X_test)
虽然我们可以通过shap获得准确的特征重要性,但它们在计算上比catboost内置特征重要性更昂贵。
奖金
基于相同概念但不同实现的另一个特征重要性是基于排列的特征重要性。catboost没有使用它,这纯粹是与模型无关并且易于计算。
我们如何选择?
虽然BothPredictionValuesChange和LossFunctionChange可用于所有类型的指标,但建议使用LossFunctionChange对度量进行排序。除了PredictionValuesChange之外,所有其他方法都可以使用测试数据,使用在训练数据上训练的模型来查找特征重要性。
为了更好地理解这些差异,以下是我们讨论的所有方法的结果:


catboost特征的结果。预测人们是否会从经典的“成人”人口普查数据集中报告超过5万美元的收入(使用对数损失)
从上面的图中,我们可以看到大多数方法都同意顶级特征。它看起来像LossFunctionChange最接近shap(更可靠)。但是,直接比较这些方法是不公平的,因为预测值的变化是基于训练数据,而所有其他方法都是基于测试数据。
我们还应该看到运行所有这些所需的时间:
交互
使用此参数,您可以找到一对要素的强度(两个要素的重要性)。
在输出中,您将获得每对特性的列表。该列表将具有3个值,第一个值是该对中第一个要素的索引,第二个值是该对中第二个要素的索引,第三个值是该对的特征重要性得分。有关实施细节,请查看嵌入式笔记本。
值得注意的是,单个特征重要性中的前两个特征不一定是最强的一对。
笔记本
在笔记本中使用的数据集
对象重要性
你为什么要知道它? 从训练数据中删除最无用的训练对象 根据哪些新对象预期最“有用”,优先考虑一批新对象进行标记,这类似于主动学习
使用此功能,您可以计算每个对象对测试数据的优化指标的影响。正值反映优化度量增加,负值反映优化度量减少。此方法是本文中描述的方法的一种实现。这些算法的详细信息超出了本文的讨论范围。
对象重要性的Catboost教程
cb.get_object_importance中有三种类型的update_method: SinglePoint:最快、最不准确的方法 TopKLeaves:指定叶数。值越高、计算越准确、越慢 AllPoints:最慢、最准确的方法
例如,以下值将方法设置为TopKLeaves,并将叶数限制为3: TopKLeaves:top= 3
模型分析图
Catboost最近在其最新更新中推出了此功能。通过此功能,我们将能够可视化算法如何分割每个要素的数据,并查看特定于要素的统计信息。更具体地说,我们将能够看到: 每个bin的平均目标值(bin用于连续功能)或类别(目前仅支持OHE功能) 每个箱/类别的平均预测值 每个bin中的对象数 不同特征值的预测:对于每个对象,特征值都是变化的,因此它会落入某个区域。然后,模型根据该特征的新值预测目标,并获取区域中预测的平均值(由红点给出)。
这个图将为我们提供信息,例如我们的分裂是多么均匀(我们不希望所有对象都进入一个区域),我们的预测是否接近目标(蓝色和橙色线),红线将告诉我们,我们的预测多敏感。
数值特征分析
单热编码特征分析

本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2019-07-05 14:49:00
有人提出,这个系统可能会被一部分人用来寻找“滥交的女性”,从而变成约炮工具,你有考虑过这个问题吗?
不存在这个可能。这个查询系统需要通过eID(公民网络电子身份标识)实名认证后注册登录,不经过本人同意是无法查询的。增加 人脸识别 作为二次确认后,只能查询自己是否有视频或图片被上传到色情网站。
文 | 陈怡含
编辑 | 陶若谷
5月28日早上,程序员李旭(化名)到自己的公司后,发现前一天发的一条微博在网上炸了。评论区里,骂声扑面而来:“以荡妇羞辱为本质”、“对他人隐私的完完全全地侵犯”、“违法而满足一己私欲的炫技”……
半年时间,100多TB数据,利用海外一些主要色情网站采集的数据比对微博等社交媒体,李旭在名为“将记忆深埋“的微博里写,他们“在全球范围内成功识别了10多万从事不可描述行业的小姐姐”。
简单说,他和他的团队利用图像比对的原理开发了一套AI系统,用来识别社交媒体上“滥交的女性”。2018年8月13日,他首次在网络上发布了关于这个项目的构想——
“鉴于很多人都在说程序员是各种退休小姐姐的接盘侠,我联合了几个小伙伴准备把各种色情网站上的视频和图片打tags后去做匹配,为码农朋友们做一个初步过滤。”
专栏作家侯虹斌告诉《极昼》,女性选程序员作为’接盘侠’,“完全是他们一种非常荒诞的想象”。相反,她提到美国警方曾在一两年前公布过一项数据,某次“钓鱼执法”抓到的上百名男性嫖客里,中文姓名的超过1/10,身份是在当地工作的程序员。她认为,李旭从头到尾都是要为男性谋福利,“带有极其男权的视角,猎奇、猥琐的那种”。
侯虹斌认为,视频中的人不管是不是性工作者,一定有被偷拍的、被迫的。本来这些视频只有很少一部分人才会看到,但经过他们传播,色情网站的浏览量一定会暴增,对受害女性会二次伤害,除非这个系统完全没有影响力。
“我一直在尝试解释,但已经没有人愿意听了。”李旭接连发布多条微博,说明查询需要通过实名认证和人脸识别,仅供本人检测是否在网络上被传播过不雅视频和图片;项目并非为了盈利,而是想帮助“真正需要帮助的人”。他原本计划“在解决法律问题后公开发布(这个查询系统)”。
数轮辩论后,他关闭了评论功能。5月31日,他取消了前一日宣布的开通直播间接受所有媒体采访的计划,只留下邮箱地址,用以回应公众的质疑。随后,他删除了项目的所有数据。
《极昼》通过邮件联系了李旭。他逐一回复了问题,答案总是简短、概括。李旭在德国创业,有自己的科技公司。微博简介里,他给自己加上几个标签:异性恋,C/C++,Lisp,Julia Developer,Startup,非著名黑客, 人工智能 砖家,aka(Also Known As)真伪书生。
“我们筛选出了不到11万女性,拥有微博或抖音帐号的不到1000人”
极昼:你做这个项目的灵感和初衷是什么?
李旭: 最初是为了寻找那些滥交的女性。但在项目真正启动后,我觉得女性可以用它来查询色情网站上是否有自己被迷奸、诱奸的视频或图片,并且它可以让她们尝试发送“DMCA删除请求”给色情网站,这样可能会更有意义。
(编者注:DMCA全称为“Digital Millennium Copyright Act”,即美国的《数字千年版权法案》,是保护网络作品著作权的法律依据。)
极昼:你怎么定义“滥交的女性”?身边有吗?
李旭: 就是网上一些炫耀自己睡了多少男人、喜欢群交的女性。父母曾经教育过我要远离那些“乱七八糟的女性”。我身边没有。
极昼:为什么要寻找她们呢?
李旭: 我有一个朋友,十多年前上大学的时候认识的,他被这种人伤害过。去年,他染上了HIV,问我借钱治病。他谈起这件事的时候很懊悔,也带着绝望。患病对他的影响很大,原本挺开朗的一个人,变得沉默寡言。现在他身体还好,仍然在治疗中。
极昼:女方是性工作者吗?
李旭: 我不好给别人乱贴标签,不知道是不是职业性工作者。但我在色情网站上发现了那个女孩和一些黑人的性爱视频。
她并不知道自己被感染(HIV),不是恶意隐瞒。得知我朋友患病之后,她也很绝望。
极昼:项目真正启动后,想法为什么发生了转变?
李旭: 我们在抓取数据后发现,在欧美色情网站上,有很多中国女性被偷拍的性爱视频,而且在一些社交平台上,还有人用视频和图片炫耀自己和多少个中国女性做过爱。
后来我们在全球筛选出了不到11万女性,其中拥有微博或抖音帐号的,只有不到1000人。这个数字在我意料之外,却也在情理之中,因为我们并没有采集到太多的国内社交媒体的数据。
极昼:为什么只做女版,不做男版?
李旭: 因为采集数据的时候,并没有采集男性社交媒体数据来进行大规模训练,仓促做男版误报率可能会非常高。而且我现在工作很忙,没有太多精力来做。
“做项目时没有考虑那么多”
极昼:你在微博上说“联合了几个小伙伴”,能介绍一下你的团队吗?
李旭: 一共有七个人,来自不同国家,其中有一个女性。他们都是我打电话邀请的,其中两个人有过犹豫,担心程序做出来后被滥用,最终大家在线下见面,一起讨论了整个项目的社会意义,以及如何保证数据不被滥用,才确定下来。
极昼:能形容一下他们都是什么样的人吗?
李旭: 可以说是Geek(极客),也可以说是Old School Hacker(老派黑客)。
极昼:中途有人退出吗?
李旭: 没有。
极昼:你们是否考虑过合法性问题?从什么时候开始的?
李旭: 做项目的时候并没有考虑那么多,两个月前开始考虑。我说过很多次,在做好完整的隐私条款、解决法律问题之前,这套查询系统是不会发布的。
极昼:系统的数据来源是什么?是否会有侵犯隐私权的风险?
李旭: 目前的数据来源于互联网的公开数据。至于采集社交媒体数据,那是没办法的事儿,因为前期需要数据做支撑,进行规模训练。商业化的情况下,可能会存在部分侵犯隐私权(的风险)。
(编者注:西安交通大学苏州信息安全法律研究中心主任马民虎告诉《极昼》,根据我国的《网络安全法》,未经本人同意在社交网络收集个人信息是一种非法行为。如果有中国用户使用这个系统,开发者就会面临违反《网络安全法》的风险。
中国人民大学法学院教授张新宝补充,鉴于开发行为在德国发生,开发者会触犯到欧盟去年5月25日出台的《通用数据保护条例》。这一条例曾被评价为“史上最严个人数据保护条例”。)
极昼:性爱视频网站上有大量的偷拍,如何甄别摆拍与偷拍?
李旭: 通过摄像机的角度和位置来区分。
极昼:如何甄别性交易与伴侣之间的性爱视频?
李旭: 无法甄别。
极昼:这样可能会影响到不是性工作者的女性?
李旭: 这个查询系统需要通过eID(公民网络电子身份标识)实名认证后注册登录,不经过本人同意是无法查询的。增加人脸识别作为二次确认后,只能查询自己是否有视频或图片被上传到色情网站。我不认为这样会影响到别的女性。
极昼:通过eID系统来保障隐私权,在技术上如何实现?
李旭: 欧盟1999年开始推行eID ,目前在很多国家已经完全普及。eID服务是可以随便申请接入的,在中国也一样。
(编者注:马民虎教授解释,eID与二代身份证网络认证不同,后者的应用受到《中华人民共和国居民身份证法》的保护,而前者在我国的普及度并不高,国家也没有在法律层面推行。
中国公民网络身份识别系统的官网显示,“凡是认可《eID个人信息保护政策》,致力于保护个人信息的线上应用,均可申请接入eID服务”。申请者需与专门的服务机构签订合作协议,并通过eID签发中心的审核。马民虎认为,这个系统有非法收集个人信息的风险,签发中心不会通过其接入eID服务的审核。)

图片来源:中国公民网络身份识别系统官网
极昼:有人提出,这个系统可能会被一部分人用来寻找“滥交的女性”,从而变成约炮工具,你有考虑过这个问题吗?
李旭: 不存在这个可能,答案同上。我也多次在删除的微博里提到过。
极昼:有人说这个项目的本质是“荡妇羞辱”,你怎么看?
李旭: 完全不是,这是典型的污蔑。在2018年8月公布要做这个项目的时候,我就已经考虑了隐私问题。
(编者注:李旭向《极昼》提供的一张截图显示,2018年8月13日,他在微博上就提出通过eID实名认证的想法。原文与现在的说法有部分差别:“为了避免滥用和相应法律风险,如果需要获得源数据,我们会通过eID进行实名认证后获取。”
2019年5月28日,引起舆论关注后,李旭发布了这样一条微博:“鉴于很多(人)说到偷拍视频存在的问题……在合法的产品对外发布时,我会单独把偷拍数据比对放在另外一个数据库。仅供本人通过eID实名登录并人脸识别认证才能查询……”)
李旭微博截图,受访者供图
“是的,我做错了,不应该仓促发布”
极昼:你在什么时候发现这个项目在网络上引起了很大风波?
李旭: 发布项目成功那条微博的第二天,我到公司后在微博上看到的。一个帐号(对我的微博)选择性截图,并配了一份聊天记录——不知道是微信还是QQ里面,有人自称开发了“原谅宝”程序,要发起众筹。
网上流传的那个“原谅宝”,我并不知情。目前为止,我这套系统还没有命名,不可能是“原谅宝”。
我发现后给那个账号发了消息,让他道歉并澄清此事。但事实上已经没多大作用了,他的微博被转载到各种论坛和群里,铺天盖地的漫骂出现。我一直在尝试解释,但已经没有人愿意听了,随后我关闭了微博的评论。
极昼:之前有预料到会遭受到这么多的反对和攻击吗?
李旭: 没有预料到。我还认为只可能有来自非法色情产业的攻击。
整个项目过程中都没有遇到过类似的反对和攻击。如果有的话,我不会想再受到第二次这样的攻击。
极昼:你最不能接受的攻击是哪种?
李旭: 无脑谩骂。
极昼:团队其他人什么时候知道的?
李旭: 5月29日。他们说我太冒失,不应该那么冲动地公布这个消息。
极昼:有人说,如果把这个项目写进简历里,再也没有人会录用你了。你怎么看?
李旭: 我这辈子都不会写简历了,打工是不可能的。
极昼:5月31日,你删除了项目的所有数据,为什么?
李旭: 承受不了舆论压力。如果是因为法律风险,我最多不发布产品。
极昼:你家人的态度是什么?
李旭: 我的未婚妻很支持,她知道这个项目后,主动减少让我陪她购物的时间,以便我能尽早完成。她也知道我花钱采购设备,并没有说我什么。这几天,她的态度还是和从前一样,没有变化。
极昼:这个项目一共花了多少钱?
李旭: 超过20万欧元,完全是我个人出资的。
极昼:这不是一笔小数目。
李旭: 这笔钱对我而言并不多,业余时间我在金融市场大概一个月能赚回来。我做这个项目不是奔着赚钱去的。
极昼:那是完全没有考虑盈利吗?
李旭: 考虑了盈利,但所有的盈利,除去服务器升级、带宽费用、电费等保障基础运营的费用,剩余的将全部捐赠给预防艾滋病的公益机构。这也是为什么团队成员都没有拿一分钱,做这份业余工作的最主要原因。
事实上,如果(5月31日)能正常直播的话,产生的所有收益也是直接捐赠给中国预防性病艾滋病基金会,用于救助受艾滋病影响的儿童。这个信息你们可以和平台确认。
极昼:你还把微博头像改成了鞠躬的小人,旁边写着“对不起”,是觉得自己做错了吗?
李旭: 是的,做错了。我不应该仓促发布,应该做好完整的计划,表明我们事实上是要做什么,并尽可能争取得到相应部门的支持。
极昼:那句“对不起”是对谁说的?
李旭: 对我们的开发人员说的,也是对所有被误解的人说的。
(应受访对象要求,李旭为化名)
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2019-07-05 10:30:00
对平台上的卖家来说,如何给宝贝取标题、选择关键词投放对于获取站内站外的搜索流量来说都至关重要,而对于独立B2C来说,在显示搜索结果时,除了根据商品关键词进行匹配外,还可以向用户主动推荐关联商品。
在选择商品关键词时,卖家可以从四个途径下手:站外投放热词、站内搜索热词、商品属性以及 行业数据 。而对平台或者独立B2C来说,如何选择商品关键词是 数据挖掘 应用的第一步,接下来就是如何匹配的问题。这一过程既是在满足用户搜索需求,又是在主动营销商品。
什么是搜索?
搜索就是根据用户输入关键词,下面显示搜索结果。从用户的角度来说,就是根据自己设想的词来找到想要的商品。而从卖家的角度来说,就是根据用户输入的关键词,来快速地帮助用户找到他们想要找的商品,从而完成购买的动作。
以独立B2C为例,卖家可以影响用户的输入,甚至引导用户去购买一些商品,尽管这些商品可能用户并不是特别需要,通过一些场内的场景渲染也能达成交易。
搜索引擎如何给商品打标签?
如何通过用户输入的关键词来快速地找到商品,就是搜索引擎要干的事情了,作为搜索引擎推荐有好多方式,最常用的就是给商品打标签,让用户输入的词和标签进行匹配,然后根据某种规则进行结果的顺序展现。而标签的生成可以是品类人员自己打的,也可以是通过技术手段把商品的名称拆解成多个关键词作为标签,当然也可以用商品本身的属性。也有两种都用的,后一种做法更常见,所以很多卖家经常要修改商品标题,因为商品标题是最常见的商品标签拆分来源。
如何给商品选择关键词(标题、标签)?
以独立B2C网站为例,商品关键词的来源有四种:站外投放、站内搜索、商品属性、行业数据。
1、站外:投放热词及相关词
站外投放搜索广告,是做电商常用手段,主要用来流量的导入、招募新用户。搜索引擎对网站友好核心的一个特点是:根据某个词显示的结果列表中,你的排名比较靠前,一般的搜索会绝对根据用户输入的词来搜索,但是做的较好的搜索引擎会显示与词相近的词的展现结果。之所以产生这样的结果和显示结果的策略,是因为搜索引擎在显示结果时,往往考虑用户搜索时的场景。比如我搜索“王菲”,结果会显示明星王菲,而李亚鹏的相关信息也会显示,原因是最近他们离婚了,搜索引擎就会猜测(甚至强制认为)你想要的结果和这个事件相关,所以会显示李亚鹏的新闻。当然还需要数据的佐证,比如同一个访问会同时搜索王菲、李亚鹏,一起输入或者第一次搜索王菲,第二次搜索李亚鹏之类。这种做法是 协同式搜索 的一种做法。还有就是你搜索wangfei,搜索引擎也会显示搜索王菲的结果。不过,如果你入住的是电商平台,就要看看平台的搜索效果了,并不是每家都能做到像百度这样的协同。
策略:记录热点关键词,优化商品标题
记录热点关键词,然后在独立的B2C内部优化商品标题,如果是自己可以用标签控制排序,那就对想推荐的商品打标签,也可以在搜索引擎买一些相近的关键词。如果是入住的电商平台,可以加入相近的词的进行优化,这样也可以加大些相近词的带来的流量,毕竟每个地方的说法不一样,小流量也是流量。
2、站内:用户搜索热词
站内搜索是用户在网站内部搜索的关键词,用来寻找想要的商品,和站外搜索引擎的工作方式类似,区别是站内搜索,我们可以获得更多的数据信息,比如搜索的用户上次搜索的词是什么、购买过什么,就根据这两个点就可以进行相关的精准推荐,比如他搜索了一串月饼相关的词,又有发往广州的包裹信息,就可以推荐些广州常吃的月饼,比如蛋黄的、莲蓉的,如果是东北的,那就推荐点五仁的吧。而这些标签可以直接做到标题,也可以用后台的搜索标签,主要看系统是否支持。
策略:针对性布局商品,控制热词显示结果
根据站内的搜索词,有针对性地对商品进行布局,可以根据地域、用户群甚至用户进行分析,得到相关的偏好,而对商品标题进行优化,不要让站内搜索的词显示不了结果,也不要紧盯着那些搜索次数比较高的词,有很多偏好比较明显的词流量不大,但是没有结果的例子很多。举例,在ebay搜索olympic,正常ebay是不能用这个词作为商品标题一部分的,除非你得到相关的授权,如果独立B2C就可以做,虽然我不能显示相关标题的商品,我可以显示相关的运动产品,比如相关的运动服。
3、商品属性:商品本身标签
商品属性是针对搜索词进行关键布局的,商品属性是商品布局的核心,就是买什么样的商品,就吆喝什么。商品属性分自然属性、社会属性,在选择商品关键词时可以从这两个角度考虑。
自然属性是商品本身固有的一些特点比如颜色、物理成分、外观、大小、软硬程度、归属哪些类目等。这些是商品的基础属性,它们基本决定了商品的成本,或者更准确的说决定了它们的生产成本。比如利用真皮做的包和用人造革做的包成本不一样,不同大小的包成本也不一样。基础属性也间接决定了商品价格段、目标人群、运输成本等。商品运营的核心就是在商品自然属近似的情况下,突出差异,使市场价格和目标人群差异化。比如小音箱,带wifi和不带wifi售价分别为:10元、50元。其核心就是芯片组的差别,价格差10元,销售价格却差40元。
社会属性主要用来促使交易达成,无论是良品、治愈、萌系,还是三折、包邮、送礼都是为了达成交易。流行品一般会用包邮、独家之类的服务性标签;新品、清仓是针对商品生命周期的,比如9月店家对秋装打的标签是新品,对夏装是清仓;买二送一、三折是价格策略的标签。
策略:根据站内外热词调节,实现差异化竞争
针对站内站外的搜索热词就可以对商品属性进行优化了。一是标题优化,很多卖家经常对一些商品修改标题,目的就是为了适应用户搜索时热词的改变对商品的影响,尽量使商品能适应用户搜索词的变化。站内热词是本站用户倾向的一个风向标,很多电商都做了相关的分析来指导品类和采购。如果是自己打标签的方式会更好,这样不用修改标题就可以针对某种类型的商品进行标记,使得某些词的搜索结果就是固定的。然后加入一些人工干预和算法模型的结果,就可以完成有针对性地推广,有可以有个性的展现了。这种做法比修改标题更容易。
4、行业数据
速卖通提供最近用户搜索关键词,这不是店家可以获取的,这些词可以让我们知道整个平台和其他卖家的用户的搜索偏好,对搜索比较多的词,上升比较快的词要重点关注,看自己是否有对应的商品,是否需要开发新品,已有商品是否有价格优势等。我们可以根据这些热词洞悉一些市场热点,更好的把握市场的需求。
如何给用户推荐商品?
对B2C网站来说,根据用户搜索词,推荐出商品列表,重点要考虑两点:用户行为和自己售卖的商品。
用户搜索词和历史购买记录能表明用户对商品价格、品牌等偏好,推荐商品时,可以是大众化的,即每个人搜索同一个词是同样的结果,或者一类人搜索同一个词是一样的结果。也可以差异化,即每个人搜索的结果都不同。这个主要取决于 数据分析 能力,如果你对用户非常了解,知道他的购物习惯,同时自己的品类又足够丰富,就可以针对性地做推荐。如果没有强大的分析系统,品类分析不够完整,那就依靠品类运营人员的理解强制性对商品进行分类,至少可以明确地告诉别人我卖的是什么品类,什么价格段。
总之,在选择商品关键词时,一定要突出特点,不要面面俱到,千万别卖没有特点的商品。 作者:庖丁的刀
来自:天下网商
链接:http://www.iwshang.com/Post/Default/Index/pid/232255.html
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2013-09-27 21:25:00
摘要:2016年3月7日, 谷歌 首席科学家,MapReduce、BigTable等系统的创造者,Jeff Dean受邀韩国大学,演讲主题《大规模 深度学习 》,这里部分来自highscalability的文字和笔者Youtube上的听录。刚好演讲在 AlphaGo 和李世石比赛之前,观众也问了他的预测,他只是说训练了5个月的机器跟顶尖高手的差距不好说;还有人问道他喜欢的编程语言(C++爱恨交织,喜欢Go的简洁,Sawzall才是真爱);在Google作为首席一天是怎么过的(要吃好早饭,到处闲逛闲聊,找到那些每个领域专家一起攻克难题)。

整合意味着理解 如果你不理解信息中的奥秘,那么你也很难去组织它。
Jeff Dean是Google系统架构组院士,在讲座:“大规模深度学习构建智能计算机系统”中提到这句和Google的使命: 整合全球信息,使人人皆可访问并从中受益 。早期他们通过收集,清理,存储,索引,汇报,检索数据完成“整合”的工作,当Google完成这个使命,就去迎接下一个挑战。
理解到底是什么含义?
看到这张图,你马上知道是小宝宝抱着泰迪熊睡觉。而看到下张街景,马上意识到纪念品店里面有打折信息。其实直到最近,计算机才可以提取图片中的信息。
如果想从图像去解释物理世界,计算机需要去选择跟那些感兴趣的点,阅读文字并去真正理解。
像下面的文字“car parts for sale(卖汽车配件)”,传统的Google通过关键字匹配来给出结果,但更好的匹配是第二个。这是一个需求深度理解的过程,而不能停留在字面,要去做一个优秀搜索和语言理解产品。
Google的深度 神经网络 历史
Google跟其他公司的不同是,2011年就开始Google大脑计划,当时想通过使用神经网络来提升技术水准,但并没有把研究做成像大学象牙塔那种,而是结合安卓,Gmail,图片去改进产品解决真正问题。这对其他公司也是很好的借鉴, 把研究和员工工作结合起来 。
神经网络老早就开始研究,上世纪60年代发明,在80年代和90年代早期也流行过,后来又不火了。两个原因: 缺少计算能力去训练数据模型, 这样也不能用来做更大规模的问题; 2)缺少大量有效的数据集 。而Google通过算法的力量,在加上他们强大的基础架构,海量数据集创造了AI的绝佳温床。
深度学习一开始从少数的产品组开始,一段时间后反响很好,能解决之前不能做的,就更多的团队开始采纳。使用深度学习的产品有:安卓,Apps,药品发现,Gmail,图片理解,地图,自然语言,图片,机器人,语音翻译等。
深度学习能应用到很多领域原因是那些通用模块:语音,文字,搜索词,图片,视频,标签,实体,短语,音频特性。输入一类信息,决定你想要的输出,收集训练数据作为你想要计算的潜在函数,然后就放手不管了。
模型很赞的原因是因为灌了很多原始形式的数据。你不需要教工程师很多特征点,模型的力量在于从观察一些例子就能自动识别数据中的有用信息。
深度神经网络是什么?
神经网络就是一些从数据提炼的复杂函数。从一个空间输入在转化为另一个空间的输出。这里的函数不是像平方,而是真正复杂的函数。当你给出一些原始像素,比如猫,而输出就是对象的类别。
深度学习中的“深度”指的是神经网络中的层数。这个系统的良好性质是一组简单的可以训练的数学函数集合。深度神经网络适用于很多 机器学习 风格。
比如你给输入一张猫的图片,输出是人工标记的猫图片,这是 监督学习 。你把很多这样监督样本给系统,让它去学习近似的函数,如同从监督样本中观察出来的。
还有一种是 非监督学习 ,给出一个图片,你也不知道里面是啥,系统可以学习去寻找在很多图片中出现的模式。这样即使不认识图片,它也能识别所有的图片中都有一只猫。
增强学习也适用,这也是AlphaGo用到的技术。
什么是深度学习?
深度网络模型是类似于大脑行为的原理。但不是具体模拟神经元如何工作。而是一种简单抽象的神经元版本。
神经元有一组输入。真正神经元会有不同的强度的输入。在 人工智能 网中试图去学习到这些边上的权重,去加强不同输入的联系。真正神经元通过输入和强度的组合去决定要不要生成脉冲。
人工神经元不会产生脉冲,但会生成一个数值。神经元的函数就是通过非线性函数计算输入的加权乘以权重之和。
典型的非线性函数就是整形线性单元(max(0, x)),在90年代很多非线性函数是很平缓的sigmoid()函数或者tanh()函数。但对于神经元来说产生的数值是不是更接近0对优化系统更有利。比如如果神经元有3个输入 X1, X1, X3,权重分别是 -0.21, 0.3, 0.7,计算就是 y = max(0, -.0.21*x1 + 0.3*x2 + 0.7*x3)。
为了决定图片到底是猫还是狗,这个图片要经过很多层。这些神经元根据输入来产生下一步。
最低层的神经元会查看像素的小块。更高层的神经元会看下层神经元的输出再决定是否生产。
这个模型也会错,比如说这里是猫,但事实上是狗。那么做错误决定的信号就会返回到系统中做调整,让剩余的模型在下一次查看图片时候,更可能输出狗。这就是神经网络的目标,通过模型小步调整边的权重让它更可能去得到正确答案。你可以通过所有样本去聚合,这样可以降低错误率。
学习算法其实比较简单如下 选择随机训练样本“(输入,标签)”,比如上面猫图和想要的输出标签,‘猫’ 运行神经网络,在输入上去查看它产生的。 调整边的权重让最后输出更接近于“标签”上的。
如何调整边的权重去保障输出更接近于标签呢?
反向传播:积分的链式法则在决定高层神经网络中使用,如果选择是猫而不是狗呢?得想办法去调整高层的权重去让它更可以决定是“狗”。
根据箭头方向和权重去让它更可能说是狗。不要步子迈得太大因为这种表面很复杂,微调一小步让它下次更可能给出狗的结果。通过很多迭代以及查看例子,结果更可能会是狗。通过这个链式法则去理解底层参数改变是如何影响到输出的。说白了就是网络变化回路反馈到输入,使得整个模型更适应去选择“狗”。
权重的微调
真正神经网络通过亿级的参数在亿级的维度做调整,去理解输出网络。Google目前有能力如何快速搭建和训练这些海量数据上的模型,去解决实际问题,在快速去不同广泛的平台去部署生产模型(手机,传感器,云端等)。
神经网络的奇妙特性
就是说神经网络可以用在很多不同问题上。 文本:万亿级别的英文和其他语言资料。从一个语言翻译到另一个,从短语到整句。 虚拟化数据:十亿级别的图谱,视频。 语音:每天都产生万小时的资料。 用户行为: 很多应用产生数据。比如搜索引擎的查询,用户在email中标记垃圾。这些都可以学习并搭建智能系统。 知识图谱:十亿级别的标签化关系元组。
如果吸收更多数据,让模型变大,结果也更好。
如果你输入更多数据,但没有把模型变大,模型的能力就会受限在一些数据集中的明显特征。通过增加模型的规模,让它不仅记住明显的,还有一些也许出现很少的细微特征。
通过更大的模型,更多数据,计算需求也更大。Google很多精力花在如何提升计算量,训练更大的模型。
在Google深度学习有哪些强大应用?
1)语音识别
第一个部署深度神经网络的小组。他们实现的新模型基于神经网络而不是隐马尔可夫模型。这个问题是把从150毫秒的语音去预测中间10毫秒吞掉的声音。比如到底是ba还是ka的声音。你得到一个预测的序列,再通过语言模型去理解用户所说。
一开始的版本就把识别错误率降低了30%,确实非常厉害。后来就研究一些复杂模型去加强网络,进一步降低错误率。现在当你对着电话说话,语音识别比五年前强多了。
2)ImageNet挑战
ImageNet是6年前公布的。里面有100万张图片,算是计算机视觉领域最大的。图片中包含1000种不同分类,每一类有1000张图片。比如里面有上千张不同的豹子,摩托车等,一个麻烦的是不是所有的标签都是对的。
在神经网络使用之前,最好的错误记录是26%,2014年 Google错误率暴降到6.66%取得冠军,然后到了2015年错误率下降到3.46%。这是什么概念,大家注意到Andrej人类的错误率也有5.1%(他还是花了24小时训练后的结果)。
总之这是个又大又深的模型,每个盒子就像神经元的一层去进行卷积操作。
3)图片类别识别
计算机在花卉识别上很强大,这是非常好的模型,能够识别细微差别。
一般的效果,比如在菜品识别。
计算机也有犯错的时候,关于错误敏感性看一看上面的,比如左边鼻涕虫当成蛇,右边也不知道是什么鬼。
4)Google图片搜索
理解图片中像素的能力,Google图片团队开发了不用标签就可以搜索图片的功能。比如你可以去找雕像,素描,水,而不需提前标注。
5)街景图像
在街景中如何识别里面的文字。首先要找到文字部分,模型能够去有效预测像素中热点图,那些含有文字的像素点。训练的数据就是包含文字划分的多边形。
因为训练数据中包括不同的字符集,这样在多语言下也没问题。也要考虑大小字体,远近,不同颜色。训练的模型相对容易,就是卷积神经网络尝试去预测每个像素是否包括文字。
6)Google搜索 RankBrain
RankBrain 2015年启动,在搜索排名(前100位排第三),更多查看 Google Turning Its Lucrative Web Search Over to AI Machines
调试工具准备好,需要足够的理解能力嵌入模型,去避免主观。总体上是不想手工调参数。你需要尝试理解模型中的预测,去理解训练数据是否相关,是否跟问题无关?你需要训练数据并应用到别的上面。通过搜索查询的分布你能得到每天的变化,事件发生后改变也随时发生。你要看分布是否稳定,比如语音识别,一般人不会改变音色。当查询和文档内容频繁变化,你要保证模型是新的。我们要搭建通用工具去理解神经网络里面发生了什么,解释什么导致这个预测。
序列模型
很多问题都可以映射到从一个序列到另一个序列的规律。比如语言翻译,从英语翻译到法语,就是把英语的序列单词转化到法语序列单词。
神经网络在学习复杂函数时特别有用,这个模型学习从英文到法文的句子。句子以单词为单位,以结束符作为信号。训练模型在遇到结束符时开始产生另一个语言的对应句子。而模型函数就是把语言中语句对作为训练数据。
每一步都在词典表中的单词产生概率分布。在推理时候通过一些搜索来实现,如果你最大化每个单词的概率,这样找的不是最可能的句子。直到找到最大可能的句子找到才结束搜索。
这个系统在公开翻译系统中表现出色。大多数其他翻译系统需要手工编码或机器学习的模型只是在一小部分使用,而不是像这种整体的端到端的学习系统。
这些领域都是可以归到序列类的方法
7)智能回复
智能回复是另一个序列类的例子。在手机上你如何更快回复邮件,打字很累。
Gmail组开发了一个系统能够去预测邮件回复。第一步就是训练小量模型去预测如果消息是某一类的,怎么做简短回复。如果是一个更大,计算能力更强的模型将消息作为一个序列,尝试预测序列的响应语。比如对于节日邀约,最可能的三个答复是“算上我们”,“我们会去的”,“对不起,我们有事没法耍”。
8)看图说话
把之前开发的图片模型与序列类模型结合一起。图片模型作为输入。这里就不是阅读英文句子了,而是看图片的像素。
接下来就是训练生成字幕。训练集有5个由不同的人写的不同的字幕。总共100万图片,70万条语句。效果如下
两个模型翻译的都不错:1)一个小孩紧紧的抱住毛绒玩具。2)一个宝宝在泰迪熊旁边睡着了。
上面是一些好玩的出错语句,为啥会错,其实你自己看了也明白。
9)机器视觉和翻译结合
翻译团队写了一个app,使用计算机视觉来识别镜头中文字,再翻译成文本,最后再图片本身覆盖翻译好的文字。模型足够小可以运行在所有设备上。
直接在手机上跑一些模型中的重要方法。智能化将转移到设备端,这样不会依赖远程云端的大脑。
研究上的努力和成果转化
Google 非常在乎研究转化效率。就是要快速训练模型,理解那些做的好的和不好的,再想下一步实验。模型应该再分钟或者小时,而不是几天或者几周。这样让每个人都做研究更高效。
机器学习发展会更好,更快。Jeff说机器学习社区发展得特别快。人们发布了一篇论文,一周内就有很多研究小组跟进,下载阅读,理解实现,再发布他们自己的扩展。这跟以前的计算机期刊投稿完全不同,等6个月才知道是否被接收,然后再过3个月最后发表。而现在把时间从一年压缩到一周,真不得了。
如何快速训练大量模型

模型的并行化
神经网络有很多固有的并行化,所有不同的神经元与其他的也是保持独立,特别本地接纳的,神经元仅仅接受一小部分比它更低的神经元作为输入。
在不同的GPU上和不同机器上可以做并行。只有边界上的数据需要通信。
数据并行化
优化的模型参数集不应该在一台机器上或者一台中心服务器上,应该有多个模型拷贝,这样协作区优化参数。
在训练过程中读取数据的随机部分。每一个拷贝在模型中获取当前的参数集,读取在当前梯度下的一点数据,找到想要的参数调整,在发送调整到中心的参数服务器中。这个参数服务器会对参数做调整。整个过程重复,这个也会在很多拷贝中进行。有些使用500份在500台不同机器上的拷贝,为了快速优化参数并处理大量数据。
一种方式是 异步 的,每一个都有自己的循环,取得参数,计算梯度,发送它们,不需要任何控制和跟其他的同步,不好的是当梯度返回到参数可能在计算结束后就被移走了。对有些例子可能有50到100份的拷贝。还有一种是 同步 ,一个控制器控制所有的拷贝。
TensorFlow
在过去的几年间,我们已经建立了两代用于训练和部署神经网络的计算机系统,并且将这些系统应用于解决很多在传统上来说对计算机而言很难的问题。我们对许多这些领域的最新技术做了很大的改进。
第一代系统DistBeliet在可扩缩性上表现很好,但在用于研究时灵活性达不到预期。对问题空间的更深理解让我们可以做出一些大幅度的简化。
这也是第二代系统的研发动机,用 TensorFlow 表达高层次的机器学习计算。它是C++语言编写的核心,冗余少。而不同的前端,现有Python和C++前端,添加其他语言的前端也不是难题。
计算可以用一张数据流图来理解。
我们输入数据、权重、误差以及标签,在不同节点进行不同的运算。
TensorFlow名字的意义 Tensor(张量)意味着N维数组。1维时就是向量,2维时就是矩阵;通过图像可以代表更高维的数据流,比如,图像可以用三维张量(行,列,颜色)来表示。 Flow(流)意味着基于数据流图的计算。有许多运算(图中的节点)应用在数据流上。 张量从图象的一端流动到另一端,这就是“TensorFlow”。“边”代表张量(数据),节点代表运算处理。
这是使用张量计算的示意图。
这是使用状态计算的示意图。
这是使用分布式计算的示意图。
它能够在各个平台上自动运行模型:电话上,单个机器上(CPU或GPU),由成百上千的GPU卡组成的的分布式系统。
总结
如果你还没想通过深度学习网络去解决你的数据问题,你还是要赶紧考虑。TensorFlow 让每个人更容易获取深度学习能力。 高度扩展的设计,更快的实验速度加速研究进程 容易分享模型,开发代码应用到可重用的效果 通过同一个系统把研究工作直接用于生产环境
最后说一些quora上大家给Jeff Dean大神编的段子,供君一乐 Jeff Dean当初面试Google时,被问到“如果P=NP能够推导出哪些结论”,Jeff回答说:“P = 0或者N = 1”。而在面试官还没笑完的时候,Jeff检查了一下Google的公钥,然后在黑板上写下了私钥。
编译器从不警告Jeff Dean,只有Jeff警告编译器。
Jeff Dean的编码速度在2000年底提高了约40倍,因为他换了USB2.0的键盘。
Jeff Dean被迫发明了异步API因为有一天他把一个函数优化到在调用前就返回结果了。
Jeff Dean曾经写过一个O(n2)算法,那是为了解决旅行商问题。
Jeff Dean的键盘只有两个键,1和0。
Jeff Dean失眠的时候,就Mapreduce羊。
参考文章 Jeff Dean on Large-Scale Deep Learning at Google On HackerNews Ryan Adams with an awesome muggle accessible technical explanation of AlphaGo on the Machine Learning Music Videos episode of the Talking Machines podcast. TensorFlow Why Enrollment Is Surging in Machine Learning Classes Move Evaluation in Go Using Deep Convolutional Neural Networks In Defence of Strong AI: Semantics from Syntax The Chinese Room Argument Google: Multiplex Multiple Works Loads On Computers To Increase Machine Utilization And Save Money Google On Latency Tolerant Systems: Making A Predictable Whole Out Of Unpredictable Parts Google DeepMind: What is it, how does it work and should you be scared Inside the Artificial Brain That’s Remaking the Google Empire Neural Networks Demystified Hacker’s guide to Neural Networks Neural Networks and Deep Learning Neural Networks (General) stephencwelch/Neural-Networks-Demystified Topics Course on Deep Learning UC Berkeley Machine Learning: 2014-2015 Playing Atari with Deep Reinforcement Learning Human-level control through deep reinforcement learning
本文为专栏文章,来自:董飞,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/11227.html 。
数据分析
2016-03-26 19:30:00
今天分享一下 数据分析 的一些基本思想,我给它起了个名字叫做 用数据说话。内容都是个人的一些心得,比较肤浅!如有不足之处,希望大家谅解!废话不说了,现在咱正式开始。
用数据说话,就是用 真实的数据说 真实的话!真实也可以理解为 求真务实。那么, 数据分析 就是不断地求真,进而持续地务实的过程!用一句话表达就是 用数据说话,用真实的数据说话,说真话、说实话、说管用的话。
1.用数据说话
数据本不会说话,但是面对不同的人时,就会发出不同的声音。现在我们以 《荒岛售鞋》这个老故事为引例,从数据分析的角度来解读,看看能不能开出新花?为防止大家案例疲劳,我尽量用新的表达方式把故事罗嗦一下!
话说郭靖和杨康,被成吉思汗派去美丽的桃花岛进行射雕牌运动鞋的市场拓展。郭靖和杨康一上桃花岛就惊讶地发现这里的居民全部赤脚,没有一个穿鞋的,不论男女还是老少,莫不如此。杨康一看,倒吸了一口凉气,说:唉!完了,没啥市场!郭靖却不这么认为,马上掏出了新买的IPHONE4G给铁木真打了个长途加漫游的汇报电话。面对桃花岛这个空白的市场,郭靖电话里这么说:“桃花岛人口众多,但信息闭塞。现在全岛居民,全部赤脚。在运动鞋市场上没有任何竞争对手,茫茫蓝海,市场将为我独霸!可喜,可喜啊!” 这个时候,咱现场做个调查,假如你是成吉思汗,你会怎么抉择?(投资Y1人,不投资的N1人。)
这个时候杨康听不下去了,马上抢过电话,说到“大汗,别听郭靖瞎嚷嚷!市场虽然没有竞争,但并不就一定是蓝海。在全球化竞争的大背景下,这么轻而易举的就让我们找到了蓝海,您觉得可能吗?难道阿迪、耐克、彪马、锐步这些国际巨头都是棒槌,会发现不了?我看肯定是岛上几百年不穿鞋的生活习惯,短期内无法改变,所以各路群雄,都只能望而止步!可惜,可惜啊!” 听了杨康的论述,铁木真又该如何选择呢?请大家举手表态。(愿意投资Y2人,不愿意投资的N2人。)姜是老的辣!成吉思汗比较理性,他只说了一句:“继续调研,要用数据说话!”就把电话挂了!
一个星期之后,杨康率先给BOSS汇报了。不过他没有选择打电话,而是改发E—MAIL。原因有三:一是全球通资费太高了,钱要省着点花;二是杨康有点小人,他担心郭靖听了他的表述后,剽窃他的思想;三是他写了一份详细的调研报告,电话里三言两语说不清。杨康的调查报告里详细地记录了他与岛内精心选取的200位居民的谈话内容,以及他抽取居民样本时科学合理的甄别条件,最后的结论就是:岛内居民全部(100%)以捕鱼为生,脚一年四季泡在水里,根本就不需要鞋! 听到这个消息,成吉思汗怎么办呢?请大家继续举手表态!(愿意投资Y3人,不愿意投资的N3人。)
成吉思汗有自己的想法。这个时候,他没有做决策,而是继续等。等什么呢?等郭靖的结论!又过了两天郭靖终于打来了电话。电话里说了3句话:“这个市场可以做!原因是岛上的居民每周都要上山砍柴,并且十有八九会被划破脚!更可喜的是,这两天他用美男计泡到了岛主的女儿黄蓉,而且黄蓉答应给射雕牌运动鞋作形象代言!” 故事发生到这个阶段,我请大家做最后一次表态。(愿意投资Y4人,不愿意投资的N4人。)
好!数据在变,我们的决策也在变。不过,成吉思汗比我们理性的多。回答还是一句话,不过比第一次多了几个字:“继续深入调研,用详实数据论证。”为什么呢?难道这些数据还不够详实吗?是的!因为在成吉思汗脑袋里还存在有很多疑问。比如:
1) 难道竞争对手真的没来过?还是对方论证后真的不可行?
2) 山上不会开个伐木厂吧?如果有了伐木厂,居民就不会上山砍柴了,到时候送柴上门,鞋还有个屁用啊!
3) 为什么一周才上一次山?该不会主要使用的是太阳能吧?
4) 运动鞋的运输成本、营销成本、销售成本是多少?投资收益率有多高?
5) ……
听完这个案例,我想问大家一个问题!从数据分析的角度看,你受到了什么启示?请注意这里说的 数据分析的角度,如果你得到的启示是:铁木真领导的郭靖与杨康不是1个老男人+2个帅小伙的Gourp,而是教练型的Team。那么,抱歉!这不是我们今天讨论的范围。好,在座的各位谁来表达一下自己的看法呢?提示性的启示有:
面对同一个数据,不同的人会说不同的话。
真实的数据并不一定能推导出正确的结论。
正确的决策需要有充分的数据去论证。
……
说完了启示,咱把这页PPT总结一下。这个案例涉及数据的搜集、分析、汇报以及用于决策的整个过程。在这个过程里,无论那个细节出了问题,最终做出的决策都将是致命的!所以说质量是数据的生命,在数据用于决策的整个过程,都必须保证真实有效!
2.用真实的数据说话
所谓用真实的数据说话,就是指在说话之前,先 审核数据的真实性!现实生活中,拿着错误的数据还能大言不惭的可以说比比皆是。其中有两位杰出的代表:一个是传说中伟大的 中国统计局,另一个就是动不动就要封杀这个封杀那个的 CCTV。我不是瞎说,因为有数据支撑!
2010年1月20日,国家统计局公布了2009年全国房地产市场数据,全年房价平均每平方米上涨 813元。够雷人吧!雷声还没过,霹雳紧跟着又来了!2月25日国家统计局发布了《2009年国民经济和社会发展统计公报》,数据显示,70个大中城市房屋销售价格上涨 1.5%。真可是天雷滚滚!难怪网友把统计局票选成大天朝的娱乐至尊!
此话一出,央视不答应了!真所谓中国统计,娱乐至尊;央视不出,谁与争锋?那我们仔细推敲一下央视的数据。2010年2月15日,CCTV发布了虎年春晚的满意度报告,结果显示满意度为 83.6%。几乎同一天,新浪的公布的调查结果是14.55%;后来没几天,腾讯也发布了满意度数据,结果是10.48%。数据一出,网友们骂声不断,此起彼伏,一浪高过一浪。但是人家央视就是央视,大有敌军围困万千重,我自岿然不动的定力。更夸张的是央视不但能装作视而不见,充耳不闻,而且还继续恬不知耻地在自己家的那几个频道里卖弄数据,自娱自乐。到底央视的数据错在哪里?我们先审视一下央视的调查方法。
央视的调查结果,来自央视——索福瑞媒介研究有限公司。索福瑞号称他们电视观众满意度调查的样本覆盖了全国30个城市,抽样框总人数有30,000人,央视春晚满意度的调查就是从这3万人中随机抽取了2122人进行调查。这样看,严格意义上讲所谓83.6%的满意度只能代表3万人的看法。当然,如果我拿这个说法与央视理论,对方肯定能拿出3万代表全国的理论证据。具体就是先从2千推断3万,再用3万推及到30个城市,然后从30个城市推及至全国所有城市,最后再推及至全国。这里用到了简单随机抽样、分层抽样、典型抽样,总起来还是个多阶段抽样,多么冠冕堂皇的理论依据!但是,纵然每一步都能保证90%的可靠程度,四次推及下来理论的可靠程度也只有65%。可遗憾的是,最后一步用城市推及全国的做法在理论上还有一道坎,因为我们不知道如何用 45%的城镇居民来代表 55%的农村人口?
说完了代表性的问题,我们再看看调查方法。索福瑞采用的是电话调查,而且时段选择在春晚直播的那几个小时内。据说调查是从晚上8:30开始,一直持续到春晚结束。巨汗!8:30貌似90%的节目还没有上演,又怎么能调查到观众对整个春晚的满意度呢?
央视的数据是经不住推敲的!那么,新浪和腾讯的一定对吗?不一定,这两个数据也只能代表新浪用户和腾讯用户的春晚满意度,最多能够代表一下4亿网友,要想替13亿的中国人民表达心声,也恐怕是鞭长莫及。
欣赏了统计局和CCTV送给我们的两个开年笑话之后,我们自己也应该反思,咱们日常工作中,在从数据的 搜集、提取、整理到 分析、发布、使用的这一连串过程中,数据有没有失真?是不是数据自始自终都 很齐全、很准确,而且统计口径与分析目的保持着 高度的一致呢?这个问题留到日常工作中供大家思考。
3.说真话说实话
拿着错误的数据,肯定得不出正确的结论。那么面对真实的数据,就一定能得出正确的结论吗?未必!给大家看个小笑话。
问:你只有10平米的蜗居,邻居家从90m 2 换到190m 2 ,你的居住面积有没有增加?
答:没有。
解:错,你们两家的平均居住面积是100m 2 ,你的居住面积被神不知鬼不觉地增加了!
这个神不知鬼不觉是谁呢?无敌的平均数!仔细想想,这个均值算错了吗?没有!那么,问题出在哪里?单一的统计量存在片面性,所以要想反映数据的真实面貌,就得使用一系列统计量。
我再杜撰一个气候的例子,说明一下在结构严重失衡的情况下,使用平均数的可怕之处。我们的大中国啊,960万平方公里,同一时间里有的刮风,有的下雨,还有的高温酷暑。从去年冬天到今年的春天,北方一直暴雪连天,南方则遭遇百年旱情;而最近这段时间,南方多个省市河水决堤,沿河两岸,村庄沦陷,而北方则是烈日当头,干旱焦人,酷暑难耐。如果我们计算全年或者是全国降雨量的平均值,算出来的结果肯定是神州大地风调雨顺,国泰民安,而实际却是华夏民族饱经风霜,多灾多难!
还好,统计学家不只给了我们平均数,同时还设计了许多其他的统计量,大家看看下面这个表。
衡量数据的 集中趋势,基本有三个统计量,均值、中位数和众数。均值是数值平均数,它容易受极端值的影响。也就是说如果数据的跨度或者说是极差不大的话,用均值可以很好的反映真实情况。但是,如果数据的差异比较大,单一使用平均数就会搞出新的笑话了。中位数和众数属于位置平均数,中位数是把数据从小到大排序,正好处于中间位置的那个数,众数是说出现的频次最多的那个数。
数据除了有集中趋势,还有 离散趋势。反映离散趋势的统计量主要有方差、标准差、极差、变异系数等。方差就是观测值与均值差的平方和除以自由度,自由度一般是n或n-1。总体数据就用n,抽样数据就用n-1。标准差就是方差的正平方根,它的意义是消除了量纲的影响。极差是最大值与最小值的差,反映的是观测值的跨度范围。还有一个比较重要也是比较常用的就是变异系数,它是标准差与均值的比,目的是消除数量级的影响。
此外,还有一些是描述 数据分布的统计量,比如分位数,有四分位、八分位、十分位等等,二分位就是中位数,它们反映一系列数据某几个关键位置的数值。频率分布,就是对数据分组或者是分类后,各组或各类的百分比。偏度是用于衡量分布的不对称程度或偏斜程度,峰度是用于衡量分布的集中程度或分布曲线的尖峭程度的指标。
如果想再深入一些的话,就会用到 相关系数、置信水平、统计指数等等。相关系数是反映变量之间线性相关程度的指标,取值范围是【-1,1】,大于0为正相关,小于0为负相关,等于0表示不相关。置信水平是指总体参数值落在样本统计值某一区内的概率。统计指数就是将不能直接比较的一些指标通过同度量因素的作用使得能够比较,常见的物价指数、上证指数等等。
有了这些基本的统计量,我们在实际工作中只要稍微用心选择一下,就可以比较准确的描述数据的真实情况。
4.说管用的话
说管用的话是指深入分析数据的实质,挖掘数据的内涵,而不是停留在数据的表层,说些大话、空话或者套话。这就要求在数据分析时,首先 明确分析的目的,其次是 选择恰当的方法,最后得出有用的结论。通俗地说, 说管用的话,就是不说屁话,少说废话!
4.1明确分析目的
这里我们举个例子。我想这个例子的时候正好是7月7号,N年前的那个时候,正好是在座的各位高考的日子,所以就杜撰了一个高考的数据。
我们这个班级,虽然成绩很烂,800分的总分,平均成绩只有486分,但是人才辈出,名字一个比一个响,人气一个比一个旺。大家先认识一下,有饱读四书五经,满腹经纶的关东秀才吕轻侯;有篮球场上进攻犀利,防守严密的小飞侠科比;还有足球场上无论是边路传中还是抢点射门都有非常出色的C罗纳尔多;有喜欢烟熏妆、蓝丝袜加高跟鞋出镜的伪娘刘著,有被亿万网友烧香膜拜的春哥党教主李宇春,还有经常抱着吉他哼着绵羊音的90后MM曾轶可;以及自称冰清玉洁、妖媚性感、擅长爆发性舞蹈动作的芙蓉姐姐和非清华北大经济学硕士不嫁、奥巴马也可的重庆籍奇女子罗玉凤!
基于学生的考试成绩,不同的人会关注不同的方面,高考的判卷老师会关心试卷的 雷同程度,命题人会测试考卷的 信度和效度,研究文理分科的专家会计算 文理成绩的相关程度。但是对于普通中学,通常只会关心两个方面。一是学生成绩,计算升学率;二是教学水平,给优秀教师发奖金。如果高中的教学科在这里研究文理相关就属于废话,如果还要把问卷的信效检验也扯出来就是屁话了。
关于学生:
吕秀才:总分722分,班级第一,平均成绩超过90分,如果将其他同学的水平比作三层小楼的话,吕秀才应该是站在赛格顶上!奇才,上清华北大没有问题。
科比和C罗:总分550左右,平均不到70分!属于班级2号、3号人物,但成绩确实不咋地,不过在该班级中也算鹤立鸡群了。
刘著、李宇春、曾轶可:成绩较差,上学肯定不是她们的出路!基于平时性情怪异,男的像女,女的像男,还有一个像绵羊,建议别走高考这条寻常路,还是去湖南卫视选秀吧。
凤姐、芙蓉:这成绩,就是个脑残,估计脑袋不是被门挤过,就是被驴踢过!
关于老师:
衡量教师的优劣需要剔除异常值,吕秀才就是!吕秀才属于成绩异常出众,个人素质极高,所以他的成绩不应该成为衡量老师优劣的样本。
语文均值高,变异系数小!由此看出语文老师真是好老师!该发奖金!
同理,历史老师也不错!也应该适当奖励。至于物理老师,太差,得赶快换掉,绝对不能让他继续误人子弟了!
存在疑问的就是英语老师。英语成绩的均值较高,但变异系数大。这说明数据里可能存在极端值。可能的异常值是科比与C罗。科比美国人,外语自然好!C罗葡萄牙人,但从2003年到2009年一直在英国留学,6年啊,英语好也是应该的!所以,科比与C罗的英语成绩不能算是英语老师的栽培,所以科比和C罗是异常值,应该剔除。那么,剔除异常后就会发现英语的均值只有47分!说明英语老师并不能算做好老师,所以只能与奖金无缘了!
4.2选择恰当的方法
接上面的案例。如果我们是研究高中该不该进行文理分科的有关部门,那么我们该如何分析文理成绩之间的相关性?
举例1:如何计算文理科之间的相关性。
目前基本有三种方法,一是简单相关分析,二是典型相关分析,三是潜变量相关分析。
简单相关分析就是通过加总,分别计算出文科成绩总和、理科成绩总和,然后计算两者的简单相关系数。
典型相关分析主要用于衡量两组变量之间的相关性。它的基本原理是:为了从总体上把握两组指标之间的相关关系,分别在两组变量中提取是的相关系数最大的一系列典型变量,然后通过计算各对典型变量之间的相关性,来反映变量间的相关程度。
潜变量相关就是计算潜变量之间的相关系数。所谓潜变量是相对于显变量或者测量变量而言的。潜变量是实际工作中无法直接测量到的变量,包括比较抽象的概念和由于种种原因不能准确测量的变量。一个潜变量往往可以有多个显变量,潜变量是可以看做是其对应显变量的抽象和概括,显变量则可视为特定潜变量的测量指标。在文理科相关性的分析中,我们可以将文科、理科看成潜变量,将语文、外语、政治、历史这四个显变量看成文科的测量指标,将数学、物理、化学、生物这四个显变量看成是理科的测量指标,那么求文理成绩之间的相关问题就转化成潜变量之间相关的问题。
那么。我们究竟该选用哪种方法呢?或者假如说我们同时使用了上面三种方法,求出相关系数,该选择哪一个呢?比如我们计算的结果分别是0.35(简单相关)、0.85(最大典型变量)、-0.65(潜变量相关),这个时候我们到底该相信哪个数据呢?
其实,我更愿意相信简单相关计算的结果。原因如下:
1、简单相关,既简单又易理解。
2、典型相关的取值范围是【0,1】,它计算出的结果没有正负,只有大小。与我们实际研究目的有悖。我们想知道学生是否在文理课程上均衡发展,所谓均衡就是正相关,所谓不均衡就是负相关。而典型相关做不到。
3、潜变量相关虽然取值范围是【-1.1】,但是它多数是采用主成分的方法拟合潜变量,而依据方差提取最大主成分的过程与我们的分析貌似不甚吻合。
4、最重要的是,其实简单加总与典型相关、主成分相关拥有同一个思想,就是先把多个变量拟合成一个变量(或几个),然后分析这个拟合出来的变量之间的相关性。其实,在量纲、数量级相同的情况下,而且权重也容易计算的情况下,最简单有效的拟合就是加总!所以我认为简单加总后计算出的相关系数是最有效。而潜变量、典型变量是在量纲或数量级不等的情况下,衡量多个变量之间相关关系的有效方法。
举例2:计算硬币正反概率
最后,再给大家做道选择题。
问题:如果一枚硬币连抛10次都是正面,问第11次出现正面的概率是多少?
选项:A. 接近0% B.50% C.接近100% D. 以上答案都不对
一个硬币连抛10次都出现正面的概率是0.5 10 ,绝对的小概率事件。在一次实验中,小概率事件发生,那么我们就应该拒绝原假设。原假设是什么?硬币出现正反的概率是0.5。所以,我们可以大胆地推断,硬币本身就是一个两面都是正面的硬币,所以说第11次出现正面的概率是100%,或者接近100%。大家是不是有异议呢?
树上10只鸟,猎枪一枪打死1只,树上还剩0只的结论大家都应该同意吧。因为我们考虑的是实际问题,不是10-1=?的数学算式。所以大家在幼儿园的时候就知道枪声响过,树上一只鸟都不会剩。试想,你和你的朋友打赌投硬币猜正反,如果10次之后朋友投出来的都是正面,你会怎么想?兄弟你出千了吧,硬币肯定有问题吧!相信用不了10次,你就会提出这样的质疑了。如果说计算概率,0.5没有错,独立事件发生的概率不因之前的情况而改变。但是,如果用假设检验的思想,100%的结论就更合理了。之所以说0.5的结果不对,不是说你的计算出错了,而是在解决实际问题的时候,你太教条了,太书本了,从而选错方法了。
5.最后总结
我的分享结束了,大家也听了也笑了,但是笑过之后务必记住我啰嗦了一个小时的这句话:用数据说话就是用真实的数据说话,说真话、说实话、说管用的话!最后说一句废话:希望刚刚过去的1个小时没有浪费大家的时间。谢谢!
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2015-11-14 22:48:00
大数据 文摘出品
作者:易琬玉、曹培信
《创世纪》里,神用7天创造了这个世界。而现在,你可能也有机会体验这个过程,创造一个属于自己的宇宙。
6月11日,Space Engine 0.990版本在Steam平台发售,发售不到一天,近300测评全部为最高评价,截止6月20日已经卖出了2万份,同时Steam用户好评率高达96%。之后,还得到了资深电脑游戏玩家、复旦大学中文系教授严峰的微博推荐。

这款游戏到底为何这么受玩家热捧呢?
Space Engine是一款宇宙模拟游戏,它包含数千个真实的天体,包括来自HIP目录的恒星,来自NGC和IC目录的星系,几个知名的星云,以及所有已知的系外行星和它们的恒星。它采用星表与程序化生成创造一个边长为10Gpc的立方体宇宙,同时1:1还原了现实宇宙。
更让人震惊的是,这款游戏是是由一个俄罗斯天文学家兼码农单枪匹马开发出来的,从第一个版本开始,前后共花了九年的时间。

Vladimir Romanyuk
但如果说Space Engine只是计算机对宇宙的一种逼真展现,还停留在游戏层面,那么同一个月,另一群对天文和计算机有着狂热情怀的组织,纽约天体物理学信息中心的研究人员们,则在试图做一件更伟大的事——用AI重新创造一个宇宙。
使用神经网络模拟宇宙
6月24日,纽约天体物理学信息中心的研究人员在美国国家科学院院刊上发表了一项研究,AI创造了前所未见的模拟宇宙,效果逼真,然而AI如何完成这一模型的却是个迷。

论文下载链接:
https://www.pnas.org/content/pnas/early/2019/06/21/1821458116.full.pdf
这个项目的工作目标是为了再现宇宙起源时的种种环境条件,但是神经科学家们显然也对自己创造的模拟器的工作原理十分感兴趣。

“这就像你只是用猫和狗的图片去训练图像识别软件,但是它却可以识别大象,”这项研究的作者之一,纽约天体物理学信息中心的理论天文学家Shirley Ho评论,“没有人知道AI到底是怎么做到的,这是一个有待解决的大谜题。”
宇宙年龄和度量在数据上的巨大使得理解这些数据变得十分困难,计算机模型则是天文学家的一项有力工具。传统的模型需要多台计算机花费大量时间,因为天文学家们需要跑上千台模拟器,调整各种参数去得到最逼真的模拟。
没有录入任何相关数据,模型竟然自己跑出了“暗物质”
Shirley Ho和她的同事创造了一个深度学习网络来为这项模拟过程加速。Deep Density Displacement Model,或者叫它D^3M,这个神经网络被设计为通过识别数据的共性去“学习”如何操作这些数据。
研究人员将8000个通过传统高速计算机模拟的宇宙模型放入D^3M,等D^3M学习完这些模型的工作原理之后,研究人员就放入一个全新的前所未见的6亿光年宽度的宇宙可视立方体模型。(真正可被观测的宇宙大约是930亿光年宽度)

就像处理前面训练时的8000个数据集一样,面对这个全新的宇宙仿真模型,D^3M神经网络依旧游刃有余。
这项模拟关注的是重力在宇宙形成时所起到的作用,然而令人惊喜的是,当研究人员调到一些前所未见的参数——比如,可视宇宙中的暗物质数量——D^3M也能够进行模拟。 这让研究者们目瞪口呆,因为他们从来没有对这个模型录入过任何暗物质相关的变量。
AI或可取代传统的数值模拟宇宙学
D^3M谜一样的特性同时吸引着计算机科学家和宇宙学家。
“我们可以变成机器学习者的游乐场,去探究为什么这个模型拥有对未知事物如此之强的推算能力,为什么他能识别出大象而不只是猫和狗,”Shirley Ho说,“这是科学和深度学习之间的双向街”。
这个模型也能为对宇宙起源感兴趣的科学家省下时间。新的神经网络可以在30毫秒内完成模拟,而对于那些没有AI加持的模拟器,最快也需要几分钟。同时,它也将错误率从9.3%降到2.8%。(这些错误率是相对于黄金标准精度而言的,一个模型需要花好几百个小时去做一次模拟)
研究人员现在计划改变这个神经网络的其他参数,去测试其他例如流体力学、液体气体的运动等影响宇宙形成的因素。
N-body模拟是预测宇宙结构形成的传统方法,但计算量大。而使用深层神经网络来预测宇宙结构的形成则优于传统的解析近似法,并且精确的外推远远超出了它的训练数据。文章表明,深度学习可以精确的近似宇宙模拟,因此可以利用深度学习生成复杂的宇宙学三维模拟。
而这也表明,深度学习将来或许可以替代传统的数值模拟宇宙学。
相关报道:
https://www.livescience.com/65832-ai-creates-model-universe-mysteriously.html
本文为专栏文章,来自:大数据文摘,内容观点不代表本站立场,如若转载请联系专栏作者,本文链接:https://www.afenxi.com/65940.html 。
数据分析
2019-07-28 16:30:00
摘要:大家好!今天有两个好消息,一个是终于周五辣!还有一个 是海云又领奖咯!这次颁给海云的是“2015年-2016年度 大数据 领军企业奖”(其实我们很谦虚的,但是非要颁这个奖给我们,人家也不好拒绝嘛,哈哈)
5月12日,2016中国 大数据技术 与应用推进大会在北京召开。共有近300名政府、专家、行业及企业代表共聚一堂,就“竞争 融合 变革”为主题,对我国大数据产业的发展与现状进行了认真学习和研究。在会上, 海云数据 荣获2015到2016年度大数据领军企业奖。
会上,国家信息化专家咨询委员会委员、国家信息中心专家委员会副主任宁家骏重点介绍了习总书记4月19日在网络安全和信息化工作座谈会上的重要讲话,并详细阐述了“十三五”期间国家大数据发展的重点工作、支持方向及发展战略。宁家骏指出,大数据资源共享开放、强化大数据应用、发展大数据产业将是未来的重点工作。
此次应用推进会议不仅对“十三五” 大数据行业 的发展趋势进行了深度解读,还针对大数据行业中有杰出贡献的企业进行表彰。在此次表彰中,海云数据获得了由中国电子信息产业发展研究院所颁发的,2015到2016年度大数据领军企业奖。作为行业领军者,自2013年以来,海云数据一直倡导“大数据+”的商业概念,以“ 用数据说话 ,用数据决策”的核心思维,在 数据分析 和应用领域引领行业发展,在业界内获得巨大的认可。
海云数据专注于利用大数据分析与计算机视觉技术,帮助企业级的用户运营数据,分析业务,更加快速灵活地应用大数据。目前,海云数据已拥有国际级的数据可视分析团队,产品被公安、航空、快消、制造等行业用户所广泛使用,并进一步推动了大数据可视分析的商业应用市场空间。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-05-13 20:00:00
近日消息,国内 大数据 资产运营公司 九次方 大数据 将在上市前完成C轮融资,但九次方方面并未作出公开声明。据介绍,九次方大数据自2010年成立以来,始终致力于帮助政府激活数据,释放数据价值。目前,该公司已经成功完成了A、B两轮融资,金额达10亿元人民币。而此次C轮完成之后,该公司的估值将达到百亿元左右。
关于九次方
九次方大数据信息集团有限公司创建于2010年, 是中国最领先的大数据资产运营商,是中国第一家提出数据资产运营的公司,同时也是贵阳大数据交易所的创始者。公司坚持以“贡献中国数据智慧,释放全球数据价值”为使命,通过“三轴一平台一中心”战略,构建完整的大数据生态链。九次方大数据是国内唯一一家设计研发4000 多个政府大数据应用场景的公司。
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「 我们 」留言处理。
数据分析
2016-10-18 16:52:00