java Calendar日历
[
2006/04/05 12:50 | by fubin ]
2006/04/05 12:50 | by fubin ]
package Calendar;
import java.util.Calendar;
public class MainClass {
public static void main(String args[]) {
String months[] = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",
"九月", "十月", "十一月", "十二月" };
Calendar calendar = Calendar.getInstance();
System.out.print("日期: ");
System.out.print(months[calendar.get(Calendar.MONTH)]);
System.out.print(" " + calendar.get(Calendar.DATE) + " ");
System.out.println(calendar.get(Calendar.YEAR));
System.out.print("时间: ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 29);
calendar.set(Calendar.SECOND, 22);
System.out.print("标准时间: ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));
}
}
import java.util.Calendar;
public class MainClass {
public static void main(String args[]) {
String months[] = { "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月",
"九月", "十月", "十一月", "十二月" };
Calendar calendar = Calendar.getInstance();
System.out.print("日期: ");
System.out.print(months[calendar.get(Calendar.MONTH)]);
System.out.print(" " + calendar.get(Calendar.DATE) + " ");
System.out.println(calendar.get(Calendar.YEAR));
System.out.print("时间: ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));
calendar.set(Calendar.HOUR, 10);
calendar.set(Calendar.MINUTE, 29);
calendar.set(Calendar.SECOND, 22);
System.out.print("标准时间: ");
System.out.print(calendar.get(Calendar.HOUR) + ":");
System.out.print(calendar.get(Calendar.MINUTE) + ":");
System.out.println(calendar.get(Calendar.SECOND));
}
}
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
class ReadFiles extends Frame implements ActionListener{
static GridBagLayout grid = new GridBagLayout();
static GridBagConstraints cons = new GridBagConstraints();
Panel fn = new Panel();
static TextField f = new TextField("");
static Button get = new Button("Get");
static TextArea file = new TextArea("");
static TextArea stat = new TextArea("Ready\n");
static URL addr;
public ReadFiles() {
get.addActionListener(this);
stat.setEditable(false);
setLayout(grid);
fn.add(f);
fn.add(get);
fn.setLayout(new GridLayout(2,1));
// fileName
buildConstraints(cons,0,0,1,1,0,1,true);
grid.setConstraints(fn,cons);
add(fn);
// stat
buildConstraints(cons,0,1,1,1,1,1,false);
grid.setConstraints(stat,cons);
add(stat);
// file
buildConstraints(cons,1,0,2,3,0,200,true);
grid.setConstraints(file,cons);
add(file);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public static void main(String args[]) {
System.out.println("Starting ReadFiles...");
ReadFiles mainFrame = new ReadFiles();
mainFrame.setSize(600, 300);
mainFrame.setTitle("ReadFiles");
mainFrame.setVisible(true);
}
public void actionPerformed(ActionEvent ev)
{
stat.setText("");
URLConnection conn = null;
DataInputStream in = null;
StringBuffer buf = new StringBuffer();
String t = new String("http://"+f.getText());
//file.setText(t);
try {addr = new URL(t); }
catch( MalformedURLException x) { stat.setText(stat.getText()+"Incorrect URL\n");}
try
{
stat.setText(stat.getText()+"Connecting...\n");
conn = addr.openConnection();
conn.connect();
stat.setText(stat.getText()+"Connected...\n");
in = new DataInputStream(new BufferedInputStream(conn.getInputStream()));
stat.setText(stat.getText()+"Reading...\n");
while((t=in.readLine()) != null)
{
buf.append(t+"\n");
}
stat.setText(stat.getText()+"Displaying File...\n");
file.setText(buf.toString());
stat.setText(stat.getText()+"Done\n");
}
catch(IOException e) { stat.setText(stat.getText()+"Error Connecting\n"); }
}
public void buildConstraints(GridBagConstraints gbc, int gx,int gy, int gw, int gh, int wx, int wy,boolean f)
{
gbc.gridx=gx;
gbc.gridy=gy;
gbc.gridwidth=gw;
gbc.gridheight=gh;
gbc.weightx=wx;
gbc.weighty=wy;
if(f)
gbc.fill=GridBagConstraints.BOTH;
else
{
gbc.fill=GridBagConstraints.NONE;
gbc.anchor=GridBagConstraints.NORTH;
}
}
}
import java.awt.event.*;
import java.io.*;
import java.net.*;
class ReadFiles extends Frame implements ActionListener{
static GridBagLayout grid = new GridBagLayout();
static GridBagConstraints cons = new GridBagConstraints();
Panel fn = new Panel();
static TextField f = new TextField("");
static Button get = new Button("Get");
static TextArea file = new TextArea("");
static TextArea stat = new TextArea("Ready\n");
static URL addr;
public ReadFiles() {
get.addActionListener(this);
stat.setEditable(false);
setLayout(grid);
fn.add(f);
fn.add(get);
fn.setLayout(new GridLayout(2,1));
// fileName
buildConstraints(cons,0,0,1,1,0,1,true);
grid.setConstraints(fn,cons);
add(fn);
// stat
buildConstraints(cons,0,1,1,1,1,1,false);
grid.setConstraints(stat,cons);
add(stat);
// file
buildConstraints(cons,1,0,2,3,0,200,true);
grid.setConstraints(file,cons);
add(file);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
public static void main(String args[]) {
System.out.println("Starting ReadFiles...");
ReadFiles mainFrame = new ReadFiles();
mainFrame.setSize(600, 300);
mainFrame.setTitle("ReadFiles");
mainFrame.setVisible(true);
}
public void actionPerformed(ActionEvent ev)
{
stat.setText("");
URLConnection conn = null;
DataInputStream in = null;
StringBuffer buf = new StringBuffer();
String t = new String("http://"+f.getText());
//file.setText(t);
try {addr = new URL(t); }
catch( MalformedURLException x) { stat.setText(stat.getText()+"Incorrect URL\n");}
try
{
stat.setText(stat.getText()+"Connecting...\n");
conn = addr.openConnection();
conn.connect();
stat.setText(stat.getText()+"Connected...\n");
in = new DataInputStream(new BufferedInputStream(conn.getInputStream()));
stat.setText(stat.getText()+"Reading...\n");
while((t=in.readLine()) != null)
{
buf.append(t+"\n");
}
stat.setText(stat.getText()+"Displaying File...\n");
file.setText(buf.toString());
stat.setText(stat.getText()+"Done\n");
}
catch(IOException e) { stat.setText(stat.getText()+"Error Connecting\n"); }
}
public void buildConstraints(GridBagConstraints gbc, int gx,int gy, int gw, int gh, int wx, int wy,boolean f)
{
gbc.gridx=gx;
gbc.gridy=gy;
gbc.gridwidth=gw;
gbc.gridheight=gh;
gbc.weightx=wx;
gbc.weighty=wy;
if(f)
gbc.fill=GridBagConstraints.BOTH;
else
{
gbc.fill=GridBagConstraints.NONE;
gbc.anchor=GridBagConstraints.NORTH;
}
}
}
public class MainClass{
public static void main(String[] arg){
char myCharacter = '\u0058';
System.out.println(myCharacter);
System.out.println("\\");
System.out.println("\\\\");
}
}
public static void main(String[] arg){
char myCharacter = '\u0058';
System.out.println(myCharacter);
System.out.println("\\");
System.out.println("\\\\");
}
}
Windows Media Player文件
jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Windows 下文件名为 jar.exe,Linux 下文件名为 jar。它的运行需要用到 JDK 安装目录下 lib 目录中的 tools.jar 文件。不过我们除了安装 JDK 什么也不需要做,因为 SUN 已经帮我们做好了。我们甚至不需要将 tools.jar 放到 CLASSPATH 中。
使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:
-c 创建新的 JAR 文件包
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数
-v 生成详细报告并打印到标准输出
-f 指定 JAR 文件名,通常这个参数是必须的
-m 指定需要包含的 MANIFEST 清单文件
-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
[jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。
文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。
下面举一些例子来说明 jar 命令的用法:
1) jar cf test.jar test
该命令没有执行过程的显示,执行结果是在当前目录生成了 test.jar 文件。如果当前目录已经存在 test.jar,那么该文件将被覆盖。
2) jar cvf test.jar test
该命令与上例中的结果相同,但是由于 v 参数的作用,显示出了打包过程,如下:
标明清单(manifest)
增加:test/(读入= 0) (写出= 0)(存储了 0%)
增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%)
3) jar cvfM test.jar test
该命令与 2) 结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,打包过程的信息也略有差别:
增加:test/(读入= 0) (写出= 0)(存储了 0%)
增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%)
4) jar cvfm test.jar manifest.mf test
运行结果与 2) 相似,显示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容
5) jar tf test.jar
在 test.jar 已经存在的情况下,可以查看 test.jar 中的内容,如对于 2) 和 3) 生成的 test.jar 分别应该此命令,结果如下;
对于 2)
META-INF/
META-INF/MANIFEST.MF
test/
test/Test.class
对于 3)
test/
test/Test.class
6) jar tvf test.jar
除显示 5) 中显示的内容外,还包括包内文件的详细信息,如:
0 Wed Jun 19 15:39:06 GMT 2002 META-INF/
86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF
0 Wed Jun 19 15:33:04 GMT 2002 test/
7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class
7) jar xf test.jar
解开 test.jar 到当前目录,不显示任何信息,对于 2) 生成的 test.jar,解开后的目录结构如下:
==
|-- META-INF
| `-- MANIFEST
`-- test
`--Test.class
8) jar xvf test.jar
运行结果与 7) 相同,对于解压过程有详细信息显示,如:
创建:META-INF/
展开:META-INF/MANIFEST.MF
创建:test/
展开:test/Test.class
9) jar uf test.jar manifest.mf
在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 来查看 test.jar 可以发现 test.jar 中比原来多了一个 manifest。这里顺便提一下,如果使用 -m 参数并指定 manifest.mf 文件,那么 manifest.mf 是作为清单文件 MANIFEST 来使用的,它的内容会被添加到 MANIFEST 中;但是,如果作为一般文件添加到 JAR 文件包中,它跟一般文件无异。
10) jar uvf test.jar manifest.mf
与 9) 结果相同,同时有详细信息显示,如:
增加:manifest.mf(读入= 17) (写出= 19)(压缩了 -11%)
使用不带任何的 jar 命令我们可以看到 jar 命令的用法如下:
jar {ctxu}[vfm0M] [jar-文件] [manifest-文件] [-C 目录] 文件名 ...
其中 {ctxu} 是 jar 命令的子命令,每次 jar 命令只能包含 ctxu 中的一个,它们分别表示:
-c 创建新的 JAR 文件包
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数
-v 生成详细报告并打印到标准输出
-f 指定 JAR 文件名,通常这个参数是必须的
-m 指定需要包含的 MANIFEST 清单文件
-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
[jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。
文件名 ... 指定一个文件/目录列表,这些文件/目录就是要添加到 JAR 文件包中的文件/目录。如果指定了目录,那么 jar 命令打包的时候会自动把该目录中的所有文件和子目录打入包中。
下面举一些例子来说明 jar 命令的用法:
1) jar cf test.jar test
该命令没有执行过程的显示,执行结果是在当前目录生成了 test.jar 文件。如果当前目录已经存在 test.jar,那么该文件将被覆盖。
2) jar cvf test.jar test
该命令与上例中的结果相同,但是由于 v 参数的作用,显示出了打包过程,如下:
标明清单(manifest)
增加:test/(读入= 0) (写出= 0)(存储了 0%)
增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%)
3) jar cvfM test.jar test
该命令与 2) 结果类似,但在生成的 test.jar 中没有包含 META-INF/MANIFEST 文件,打包过程的信息也略有差别:
增加:test/(读入= 0) (写出= 0)(存储了 0%)
增加:test/Test.class(读入= 7) (写出= 6)(压缩了 14%)
4) jar cvfm test.jar manifest.mf test
运行结果与 2) 相似,显示信息也相同,只是生成 JAR 包中的 META-INF/MANIFEST 内容不同,是包含了 manifest.mf 的内容
5) jar tf test.jar
在 test.jar 已经存在的情况下,可以查看 test.jar 中的内容,如对于 2) 和 3) 生成的 test.jar 分别应该此命令,结果如下;
对于 2)
META-INF/
META-INF/MANIFEST.MF
test/
test/Test.class
对于 3)
test/
test/Test.class
6) jar tvf test.jar
除显示 5) 中显示的内容外,还包括包内文件的详细信息,如:
0 Wed Jun 19 15:39:06 GMT 2002 META-INF/
86 Wed Jun 19 15:39:06 GMT 2002 META-INF/MANIFEST.MF
0 Wed Jun 19 15:33:04 GMT 2002 test/
7 Wed Jun 19 15:33:04 GMT 2002 test/Test.class
7) jar xf test.jar
解开 test.jar 到当前目录,不显示任何信息,对于 2) 生成的 test.jar,解开后的目录结构如下:
==
|-- META-INF
| `-- MANIFEST
`-- test
`--Test.class
8) jar xvf test.jar
运行结果与 7) 相同,对于解压过程有详细信息显示,如:
创建:META-INF/
展开:META-INF/MANIFEST.MF
创建:test/
展开:test/Test.class
9) jar uf test.jar manifest.mf
在 test.jar 中添加了文件 manifest.mf,此使用 jar tf 来查看 test.jar 可以发现 test.jar 中比原来多了一个 manifest。这里顺便提一下,如果使用 -m 参数并指定 manifest.mf 文件,那么 manifest.mf 是作为清单文件 MANIFEST 来使用的,它的内容会被添加到 MANIFEST 中;但是,如果作为一般文件添加到 JAR 文件包中,它跟一般文件无异。
10) jar uvf test.jar manifest.mf
与 9) 结果相同,同时有详细信息显示,如:
增加:manifest.mf(读入= 17) (写出= 19)(压缩了 -11%)
什么是商业智能?商业智能工具都有哪些?(转载)
[
2006/03/16 02:21 | by fubin ]
2006/03/16 02:21 | by fubin ]
什么是商业智能?商业智能工具都有哪些?
商业智能也称作BI,是英文单词Business Intelligence的缩写。商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。这里所谈的数据包括来自企业业务系统的订单、库存、交易账目、客户和供应商等来自企业所处行业和竞争对手的数据以及来自企业所处的其他外部环境中的各种数据。而商业智能能够辅助的业务经营决策,既可以是操作层的,也可以是战术层和战略层的决策。为了将数据转化为知识,需要利用数据仓库、联机分析处理(OLAP)工具和数据挖掘等技术。因此,从技术层面上讲,商业智能不是什么新技术,它只是数据仓库、OLAP和数据挖掘等技术的综合运用。
商业智能定义为下列软件工具的集合:
终端用户查询和报告工具。专门用来支持初级用户的原始数据访问,不包括适应于专业人士的成品报告生成工具。
OLAP工具。提供多维数据管理环境,其典型的应用是对商业问题的建模与商业数据分析。OLAP也被称为多维分析。
数据挖掘(Data Mining)软件。使用诸如神经网络、规则归纳等技术,用来发现数据之间的关系,做出基于数据的推断。
数据仓库(Data Warehouse)和数据集市(Data Mart)产品。包括数据转换、管理和存取等方面的预配置软件,通常还包括一些业务模型,如财务分析模型。
联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。
当今的数据处理大致可以分成两大类:联机事务处理OLTP(On-Line Transaction Processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLAP是使分析人员、管理人员或执行人员能够从多角度对信息进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术。OLAP的目标是满足决策支持或者满足在多维环境下特定的查询和报表需求,它的技术核心是"维"这个概念。
“维”是人们观察客观世界的角度,是一种高层次的类型划分。“维”一般包含着层次关系,这种层次关系有时会相当复杂。通过把一个实体的多项重要的属性定义为多个维(dimension),使用户能对不同维上的数据进行比较。因此OLAP也可以说是多维数据分析工具的集合。
OLAP的基本多维分析操作有钻取(roll up和drill down)、切片(slice)和切块(dice)、以及旋转(pivot)、drill across、drill through等。
钻取是改变维的层次,变换分析的粒度。它包括向上钻取(roll up)和向下钻取(drill down)。roll up是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而drill down则相反,它从汇总数据深入到细节数据进行观察或增加新维。
切片和切块是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个,则是切块。
旋转是变换维的方向,即在表格中重新安排维的放置(例如行列互换)。
OLAP有多种实现方法,根据存储数据的方式不同可以分为ROLAP、MOLAP、HOLAP。
ROLAP表示基于关系数据库的OLAP实现(Relational OLAP)。以关系数据库为核心,以关系型结构进行多维数据的表示和存储。ROLAP将多维数据库的多维结构划分为两类表:一类是事实表,用来存储数据和维关键字;另一类是维表,即对每个维至少使用一个表来存放维的层次、成员类别等维的描述信息。维表和事实表通过主关键字和外关键字联系在一起,形成了“星型模式”。对于层次复杂的维,为避免冗余数据占用过大的存储空间,可以使用多个表来描述,这种星型模式的扩展称为“雪花模式”。
MOLAP表示基于多维数据组织的OLAP实现(Multidimensional OLAP)。以多维数据组织方式为核心,也就是说,MOLAP使用多维数组存储数据。多维数据在存储中将形成“立方块(Cube)”的结构,在MOLAP中对“立方块”的“旋转”、“切块”、“切片”是产生多维数据报表的主要技术。
HOLAP表示基于混合数据组织的OLAP实现(Hybrid OLAP)。如低层是关系型的,高层是多维矩阵型的。这种方式具有更好的灵活性。
还有其他的一些实现OLAP的方法,如提供一个专用的SQL Server,对某些存储模式(如星型、雪片型)提供对SQL查询的特殊支持。
OLAP工具是针对特定问题的联机数据访问与分析。它通过多维的方式对数据进行分析、查询和报表。维是人们观察数据的特定角度。例如,一个企业在考虑产品的销售情况时,通常从时间、地区和产品的不同角度来深入观察产品的销售情况。这里的时间、地区和产品就是维。而这些维的不同组合和所考察的度量指标构成的多维数组则是OLAP分析的基础,可形式化表示为(维1,维2,……,维n,度量指标),如(地区、时间、产品、销售额)。多维分析是指对以多维形式组织起来的数据采取切片(Slice)、切块(Dice)、钻取(Drill-down和Roll-up)、旋转(Pivot)等各种分析动作,以求剖析数据,使用户能从多个角度、多侧面地观察数据库中的数据,从而深入理解包含在数据中的信息。
主流的商业智能工具包括BO、COGNOS、BRIO。一些国内的软件工具平台如KCOM(www.kcomsoft.com)也集成了一些基本的商业智能工具。
根据综合性数据的组织方式的不同,目前常见的OLAP主要有基于多维数据库的MOLAP及基于关系数据库的ROLAP两种。MOLAP是以多维的方式组织和存储数据,ROLAP则利用现有的关系数据库技术来模拟多维数据。在数据仓库应用中,OLAP应用一般是数据仓库应用的前端工具,同时OLAP工具还可以同数据挖掘工具、统计分析工具配合使用,增强决策分析功能。
也说商业智能--原创
商业智能有三种比较典型的定义:?
(IDC)将商业智能解决方案定义为帮助企业跟踪、分析、模拟和预测他们自己的业务过程以及他们的客户、供应商和合作伙伴关系的解决方案。
? (企业界)认为BI是指一种通过智能地使用企业的数据财产来制定更好的商务决策能力。
? (学术界)BI是帮助企业提高决策能力和运营能力的概念、方法、过程以及软件的集合,其主要目标是将企业所掌握的信息转换成竞争优势,提高企业决策能力、决策效率、决策准确性。
从技术架构来讲,商业智能系统主要由数据源、数据仓库系统、商业智能应用和元数据几个部分组成。架构图如下:
1. 数据仓库系统 是商业智能应用的核心,它是整个系统存储和管理数据和信息的地方。数据仓库系统可分为以下几个部分。
? 数据抽取、转换和装载(Extract, Transform, Load) 负责将数据从业务系统或外部系统中获得,转换和处理成数据仓库需要的格式和形态,并在规定的时间装入到数据仓库中去。通常我们把这三个具体的步骤统称为ETL,在系统实现时一般采用数据抽取工具和应用编程实现,并拥有调度管理和控制功能。
? 数据仓库(Data Warehouse) 数据仓库是数据存储核心,目前,大多数数据仓库采用关系型数据库管理。由于数据量的庞大和查询复杂的特点,在系统配置上强调大规模并行处理和针对决策支持访问的专项优化。
? 操作数据(Operational Data Store) 近年来,随着商业智能应用的需求,如数据挖掘和实时业务分析,在数据仓库中需要有部分数据拥有当前数据的特征,根据业务系统的变化而变化,不必关心历史信息,同时又拥有数据仓库数据面向主题的特点。这部分数据叫作操作数据,一般采用关系数据库存储,规模适中,强调快速查询响应能力。
? 数据集市(Data Mart) 数据集市存储了由数据仓库来的,经过裁剪和归整的数据,这些数据针对某个业务部门或某种业务分析应用而建立。数据集市一般都对数据进行了各种层次的汇总,并建立多维分析的模型,同时也包括了数据采样。数据集市的存储主要有关系数据库和多维数据库。其中,多维数据库存放多维分析数据,而关系数据库则存储星型模式。
? 数据归整(Refinement) 数据归整指数据从数据仓库到数据集市的过程,它是数据仓库系统内部的数据处理和转换的过程,主要的任务是多维模型的转换、数据的汇总和采样等。有时,它由ETL系统统一调度完成。
2. 数据源包括了现有企业中所有的信息系统,以及根据决策分析需求可能涉及的其他外部数据资源。它主要包括业务数据和外部数据。
3. 商业智能应用 商业智能应用涉及数据和信息的展现部分,它是用户使用商业智能系统的界面。目前的商业智能系统一般提供以下两类功能:1、客观呈现用户想要信息,如查询和报表、联机分析处理(OLAP)。2、对数据进行进一步的分析,发现新知识,如 数据挖掘和数理统计等。
4. 元数据 是管理商业智能系统的数据,其主要部分类似于数据字典,其内容贯穿了商业智能应用的各阶段,记录着从ETL到分析展现各个阶段和各组成部分的管理信息。在系统管理上,试图提供统一的平台对元数据进行管理和维护,并通过元数据的状态驱动系统各部分的运转。不过,就目前而言,元数据的概念在数据仓库业界尚未拥有一个统一的标准,各个数据仓库厂商的产品间元数据也是不能够互通的。
BI厂商
在商业智能市场上,比较成熟的商业智能软件产品和解决方案大多都是来自于国际厂商,国内商业智能提供商大多在代理国外产品或者只是开发简单的商业智能工具。
? 国际厂商
? 从规模来看
BO 以8.23亿美元并购Crystal,成为年营业额7.36亿美元的第一大厂商。
Hyperion以1.56亿美元并购Brio,成为年营业额6亿美元的第二大厂商。
Cognos公司并购软件公司Adaytum 保持市场前三位置。
三大BI 厂商占有全世界BI 市场30% 以上份额。
? 从产品来看
在MetaGroup在最近的一份报告中,单就技术而言,处于领先地位的公司包括Cognos、Microstrategy、Brio、BO和Oracle。
Cognos与Microstratagy属于同一阵营,都属于产品线较齐全,既有前端展示功能,又有后端数据分析与挖掘功能,二者都能够提供比较集成化的方案。Cognos数据处理速度更快一些,且在预算与规划方面造诣颇深,而 Microstratagy由于其在OLAP Server上的优势在处理大数据量数据方面更出色。由于Cognos成立较早(1969)仍然沿用C/S架构外,其他几家主流厂商都基于B/S架构。Cognos设计了相应的加速器PPES(PowerPlay Enterprise Server)可解决浏览器浏览的问题
BO与Brio都是在前端展现方面比较突出,用户接受程度较高。但二者均无OLAP Server,导致数据监控功能较弱,虽然也可以与微软或Oracle的OLAP Server挂接,但这样毕竟受制于人,给客户提供的方案也不是最集成的。
Hyperion 的OLAP Server功能不错,通过收购Brio提供的产品也较为全面,在数据挖掘部分比较薄弱。
全球ERP老大SAP 也推出BI产品SAP BI,有与其R/3 ERP系统的完整性与集成性方面优势,但是其昂贵的费用的确也令很多用户有心无力。
微软的 SQL SERVER集成了 OLAP功能,并在前段工具推出了 SQL SERVER REPORTING SERVICES 一个万能报表制作工具。
谈到BI,不能不提及SAS公司,在统计分析、数据挖掘方面全球一流.宝钢是SAS 的用户。宝钢也可能是中国实施 BI 最成功,最有收获的案例。
? 国内厂商
? 主要厂商
目前,博科、金蝶、用友等发布了BI产品。
前方正的“空降兵”总裁李汉生也在领导着上海和勤软件进行BI产品的开发
中华网近期收购了一家丹麦的BI公司,并将其产品移植到中华网控股的铂金软件平台上,年后就会面市。
? 包含功能
从产品功能上看,国内厂商自行开发的软件只是一个框架,只有简单的几个模块和OEM 别人的产品。
用友的BI包括 管理驾驶舱,专家财务评估,和集成 Microstratagy 的数据分析
金碟的 BI 包括 管理驾驶舱、数据仓库,万能报表 等模块。
目前国内在BI产品方面做得最好是博科。它在IBM DB2 基础上,推出了财务智能舱的产品,模块涉及到 数据采集(ETL);基本信息设置(元数据管理),主体分析(报表、OLAP)。叫嚣三年内淘汰传统财务软件。
BI动态
从全球范围来看,IDC预测,从现在到2005年,这个市场将以27%的年平均增长率发展,届时将会达到118亿美元。
全球BI工业的发展日益显示出集中的特征,市场集中度和全球化程度不断提高,少数几家BI公司掌握了越来越多国家的市场份额。2003年,世界前3大BI企业已控制了世界BI市场的30%以上的份额。
目前的中国BI市场呈现出以下特征:
1、中国的BI市场从开始就经历了一个激烈竞争的时期,高端市场被国际大厂商所占据,低端市场是国内的BI厂商及行业的ISV及集成商在竞争。
中国的BI市场不同与世界市场,目前市场没有一个真正的领先者,就如同ERP、CRM市场一样,最大市场份额是国外的管理软件厂商。但是,未来中国的BI市场可能在低端市场出现象用友、金蝶在财务套装软件那样的格局,几个大的国内BI厂商,凭借本地化和销售网络占据市场40%以上的市场份额。而在大的行业市场里,BI将会与解决方案融合在一起,市场被行业的ISV所把持。
2、未来的BI市场将快速发展,同时BI技术也将和CRM、ERP等技术融合。
ERP与BI的融合
未来ERP厂商将会把商业智能嵌入到相应的ERP系统内,一些领先的ERP供应商逐渐把商业智能工具转移到分析应用软件上。
CRM与BI的融合
由对于CRM的行业应用不断深入发展,商业智能(BI)将基于CRM系统以及企业其它应用系统,甚至手工积累的数据或者数据集,从企业决策分析的角度拓展出更大的发展空间。 无论是集成的BI软件还是自己的统计分析工具,CRM系统必然要强调对数据和过程数据的预测和分析,这样才能真正做到科学管理、精细型管理和过程管理。基于CRM的BI,就是企业在CRM流程中对数据的统计分析,只不过其指导思想和商业模型更加CRM化,更加体现以客户为中心的营销战略。
据IDC数据调查,2003年中国大陆BI市场软件授权费用总量为2300万美元,2004年预估将达3000万美元,增幅达30%。这也导致了大量国际大厂加快进军中国市场的步伐。2004年之前,国际主流的BI厂商也只有Brio一家亲自做中国市场,这也就是为什么BO在全球销售额是Brio的6倍,但在国内却只有其一半。不过,今后Brio在国内将不再孤独了。从1月1日起,国内原BO与Crystal销售人员将会以统一的形象面对客户,并将在3月份举办新公司最大一次亚太区用户大会。在合作伙伴的选择上,BO也取消了原先的全国总代理制,与原总代Business intelligence中国有限公司解除了合约,改为多代理商制,其中便包括实力强大的神州数码。
在收购Brio之前,Hyperion全球的销售收入中BI与BPM各占一半,收购后BI产品收入则占到60%。在国内,Brio现有销售队伍与Hyperion自有BI产品的队伍进行了整合,而Hyperion最有名的BPM产品则继续由原Hyperion的人员进行销售。对于2004年的市场预期,Hyperion中国公司的目标是:中国前100强企业中15~20%的客户采用Hyperion全套产品,包括后端的BPM与前端的BI(全套产品的意思是包括财务合并、财务分析、模型、从制订战略到商业模型与流程设计到预测)。
早在2003年初,Brio便与金蝶达成战略合作伙伴关系,金蝶作为Brio的顶级代理商, 把Brio Performance Suite捆绑到金蝶的企业信息化整体解决方案中。在合作近1年后,金蝶通过OEM方式推出了自己的EPM产品,虽然目前仅仅是雏形,还有很多没有成型,但也足以表明金蝶对这块市场的重视程度。
Cognos并没有亲自进入中国大陆市场,仅由国家信息中心的北京优信佳公司作为其总代理。
另一家主流的BI厂商,MicroStrategy也在2003年11月6日宣布,将通过其在大中国区的惟一总代理FirstBI公司代理销售其软件和服务,推广它的中文版产品,向中国企业提供数据分析软件,用以优化业务运作、提高效率和改善客户关系。而FirstBI的之前正是BO公司的中国区总代理。
商业智能也称作BI,是英文单词Business Intelligence的缩写。商业智能通常被理解为将企业中现有的数据转化为知识,帮助企业做出明智的业务经营决策的工具。这里所谈的数据包括来自企业业务系统的订单、库存、交易账目、客户和供应商等来自企业所处行业和竞争对手的数据以及来自企业所处的其他外部环境中的各种数据。而商业智能能够辅助的业务经营决策,既可以是操作层的,也可以是战术层和战略层的决策。为了将数据转化为知识,需要利用数据仓库、联机分析处理(OLAP)工具和数据挖掘等技术。因此,从技术层面上讲,商业智能不是什么新技术,它只是数据仓库、OLAP和数据挖掘等技术的综合运用。
商业智能定义为下列软件工具的集合:
终端用户查询和报告工具。专门用来支持初级用户的原始数据访问,不包括适应于专业人士的成品报告生成工具。
OLAP工具。提供多维数据管理环境,其典型的应用是对商业问题的建模与商业数据分析。OLAP也被称为多维分析。
数据挖掘(Data Mining)软件。使用诸如神经网络、规则归纳等技术,用来发现数据之间的关系,做出基于数据的推断。
数据仓库(Data Warehouse)和数据集市(Data Mart)产品。包括数据转换、管理和存取等方面的预配置软件,通常还包括一些业务模型,如财务分析模型。
联机分析处理 (OLAP) 的概念最早是由关系数据库之父E.F.Codd于1993年提出的,他同时提出了关于OLAP的12条准则。OLAP的提出引起了很大的反响,OLAP作为一类产品同联机事务处理 (OLTP) 明显区分开来。
当今的数据处理大致可以分成两大类:联机事务处理OLTP(On-Line Transaction Processing)、联机分析处理OLAP(On-Line Analytical Processing)。OLTP是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLAP是使分析人员、管理人员或执行人员能够从多角度对信息进行快速、一致、交互地存取,从而获得对数据的更深入了解的一类软件技术。OLAP的目标是满足决策支持或者满足在多维环境下特定的查询和报表需求,它的技术核心是"维"这个概念。
“维”是人们观察客观世界的角度,是一种高层次的类型划分。“维”一般包含着层次关系,这种层次关系有时会相当复杂。通过把一个实体的多项重要的属性定义为多个维(dimension),使用户能对不同维上的数据进行比较。因此OLAP也可以说是多维数据分析工具的集合。
OLAP的基本多维分析操作有钻取(roll up和drill down)、切片(slice)和切块(dice)、以及旋转(pivot)、drill across、drill through等。
钻取是改变维的层次,变换分析的粒度。它包括向上钻取(roll up)和向下钻取(drill down)。roll up是在某一维上将低层次的细节数据概括到高层次的汇总数据,或者减少维数;而drill down则相反,它从汇总数据深入到细节数据进行观察或增加新维。
切片和切块是在一部分维上选定值后,关心度量数据在剩余维上的分布。如果剩余的维只有两个,则是切片;如果有三个,则是切块。
旋转是变换维的方向,即在表格中重新安排维的放置(例如行列互换)。
OLAP有多种实现方法,根据存储数据的方式不同可以分为ROLAP、MOLAP、HOLAP。
ROLAP表示基于关系数据库的OLAP实现(Relational OLAP)。以关系数据库为核心,以关系型结构进行多维数据的表示和存储。ROLAP将多维数据库的多维结构划分为两类表:一类是事实表,用来存储数据和维关键字;另一类是维表,即对每个维至少使用一个表来存放维的层次、成员类别等维的描述信息。维表和事实表通过主关键字和外关键字联系在一起,形成了“星型模式”。对于层次复杂的维,为避免冗余数据占用过大的存储空间,可以使用多个表来描述,这种星型模式的扩展称为“雪花模式”。
MOLAP表示基于多维数据组织的OLAP实现(Multidimensional OLAP)。以多维数据组织方式为核心,也就是说,MOLAP使用多维数组存储数据。多维数据在存储中将形成“立方块(Cube)”的结构,在MOLAP中对“立方块”的“旋转”、“切块”、“切片”是产生多维数据报表的主要技术。
HOLAP表示基于混合数据组织的OLAP实现(Hybrid OLAP)。如低层是关系型的,高层是多维矩阵型的。这种方式具有更好的灵活性。
还有其他的一些实现OLAP的方法,如提供一个专用的SQL Server,对某些存储模式(如星型、雪片型)提供对SQL查询的特殊支持。
OLAP工具是针对特定问题的联机数据访问与分析。它通过多维的方式对数据进行分析、查询和报表。维是人们观察数据的特定角度。例如,一个企业在考虑产品的销售情况时,通常从时间、地区和产品的不同角度来深入观察产品的销售情况。这里的时间、地区和产品就是维。而这些维的不同组合和所考察的度量指标构成的多维数组则是OLAP分析的基础,可形式化表示为(维1,维2,……,维n,度量指标),如(地区、时间、产品、销售额)。多维分析是指对以多维形式组织起来的数据采取切片(Slice)、切块(Dice)、钻取(Drill-down和Roll-up)、旋转(Pivot)等各种分析动作,以求剖析数据,使用户能从多个角度、多侧面地观察数据库中的数据,从而深入理解包含在数据中的信息。
主流的商业智能工具包括BO、COGNOS、BRIO。一些国内的软件工具平台如KCOM(www.kcomsoft.com)也集成了一些基本的商业智能工具。
根据综合性数据的组织方式的不同,目前常见的OLAP主要有基于多维数据库的MOLAP及基于关系数据库的ROLAP两种。MOLAP是以多维的方式组织和存储数据,ROLAP则利用现有的关系数据库技术来模拟多维数据。在数据仓库应用中,OLAP应用一般是数据仓库应用的前端工具,同时OLAP工具还可以同数据挖掘工具、统计分析工具配合使用,增强决策分析功能。
也说商业智能--原创
商业智能有三种比较典型的定义:?
(IDC)将商业智能解决方案定义为帮助企业跟踪、分析、模拟和预测他们自己的业务过程以及他们的客户、供应商和合作伙伴关系的解决方案。
? (企业界)认为BI是指一种通过智能地使用企业的数据财产来制定更好的商务决策能力。
? (学术界)BI是帮助企业提高决策能力和运营能力的概念、方法、过程以及软件的集合,其主要目标是将企业所掌握的信息转换成竞争优势,提高企业决策能力、决策效率、决策准确性。
从技术架构来讲,商业智能系统主要由数据源、数据仓库系统、商业智能应用和元数据几个部分组成。架构图如下:
1. 数据仓库系统 是商业智能应用的核心,它是整个系统存储和管理数据和信息的地方。数据仓库系统可分为以下几个部分。
? 数据抽取、转换和装载(Extract, Transform, Load) 负责将数据从业务系统或外部系统中获得,转换和处理成数据仓库需要的格式和形态,并在规定的时间装入到数据仓库中去。通常我们把这三个具体的步骤统称为ETL,在系统实现时一般采用数据抽取工具和应用编程实现,并拥有调度管理和控制功能。
? 数据仓库(Data Warehouse) 数据仓库是数据存储核心,目前,大多数数据仓库采用关系型数据库管理。由于数据量的庞大和查询复杂的特点,在系统配置上强调大规模并行处理和针对决策支持访问的专项优化。
? 操作数据(Operational Data Store) 近年来,随着商业智能应用的需求,如数据挖掘和实时业务分析,在数据仓库中需要有部分数据拥有当前数据的特征,根据业务系统的变化而变化,不必关心历史信息,同时又拥有数据仓库数据面向主题的特点。这部分数据叫作操作数据,一般采用关系数据库存储,规模适中,强调快速查询响应能力。
? 数据集市(Data Mart) 数据集市存储了由数据仓库来的,经过裁剪和归整的数据,这些数据针对某个业务部门或某种业务分析应用而建立。数据集市一般都对数据进行了各种层次的汇总,并建立多维分析的模型,同时也包括了数据采样。数据集市的存储主要有关系数据库和多维数据库。其中,多维数据库存放多维分析数据,而关系数据库则存储星型模式。
? 数据归整(Refinement) 数据归整指数据从数据仓库到数据集市的过程,它是数据仓库系统内部的数据处理和转换的过程,主要的任务是多维模型的转换、数据的汇总和采样等。有时,它由ETL系统统一调度完成。
2. 数据源包括了现有企业中所有的信息系统,以及根据决策分析需求可能涉及的其他外部数据资源。它主要包括业务数据和外部数据。
3. 商业智能应用 商业智能应用涉及数据和信息的展现部分,它是用户使用商业智能系统的界面。目前的商业智能系统一般提供以下两类功能:1、客观呈现用户想要信息,如查询和报表、联机分析处理(OLAP)。2、对数据进行进一步的分析,发现新知识,如 数据挖掘和数理统计等。
4. 元数据 是管理商业智能系统的数据,其主要部分类似于数据字典,其内容贯穿了商业智能应用的各阶段,记录着从ETL到分析展现各个阶段和各组成部分的管理信息。在系统管理上,试图提供统一的平台对元数据进行管理和维护,并通过元数据的状态驱动系统各部分的运转。不过,就目前而言,元数据的概念在数据仓库业界尚未拥有一个统一的标准,各个数据仓库厂商的产品间元数据也是不能够互通的。
BI厂商
在商业智能市场上,比较成熟的商业智能软件产品和解决方案大多都是来自于国际厂商,国内商业智能提供商大多在代理国外产品或者只是开发简单的商业智能工具。
? 国际厂商
? 从规模来看
BO 以8.23亿美元并购Crystal,成为年营业额7.36亿美元的第一大厂商。
Hyperion以1.56亿美元并购Brio,成为年营业额6亿美元的第二大厂商。
Cognos公司并购软件公司Adaytum 保持市场前三位置。
三大BI 厂商占有全世界BI 市场30% 以上份额。
? 从产品来看
在MetaGroup在最近的一份报告中,单就技术而言,处于领先地位的公司包括Cognos、Microstrategy、Brio、BO和Oracle。
Cognos与Microstratagy属于同一阵营,都属于产品线较齐全,既有前端展示功能,又有后端数据分析与挖掘功能,二者都能够提供比较集成化的方案。Cognos数据处理速度更快一些,且在预算与规划方面造诣颇深,而 Microstratagy由于其在OLAP Server上的优势在处理大数据量数据方面更出色。由于Cognos成立较早(1969)仍然沿用C/S架构外,其他几家主流厂商都基于B/S架构。Cognos设计了相应的加速器PPES(PowerPlay Enterprise Server)可解决浏览器浏览的问题
BO与Brio都是在前端展现方面比较突出,用户接受程度较高。但二者均无OLAP Server,导致数据监控功能较弱,虽然也可以与微软或Oracle的OLAP Server挂接,但这样毕竟受制于人,给客户提供的方案也不是最集成的。
Hyperion 的OLAP Server功能不错,通过收购Brio提供的产品也较为全面,在数据挖掘部分比较薄弱。
全球ERP老大SAP 也推出BI产品SAP BI,有与其R/3 ERP系统的完整性与集成性方面优势,但是其昂贵的费用的确也令很多用户有心无力。
微软的 SQL SERVER集成了 OLAP功能,并在前段工具推出了 SQL SERVER REPORTING SERVICES 一个万能报表制作工具。
谈到BI,不能不提及SAS公司,在统计分析、数据挖掘方面全球一流.宝钢是SAS 的用户。宝钢也可能是中国实施 BI 最成功,最有收获的案例。
? 国内厂商
? 主要厂商
目前,博科、金蝶、用友等发布了BI产品。
前方正的“空降兵”总裁李汉生也在领导着上海和勤软件进行BI产品的开发
中华网近期收购了一家丹麦的BI公司,并将其产品移植到中华网控股的铂金软件平台上,年后就会面市。
? 包含功能
从产品功能上看,国内厂商自行开发的软件只是一个框架,只有简单的几个模块和OEM 别人的产品。
用友的BI包括 管理驾驶舱,专家财务评估,和集成 Microstratagy 的数据分析
金碟的 BI 包括 管理驾驶舱、数据仓库,万能报表 等模块。
目前国内在BI产品方面做得最好是博科。它在IBM DB2 基础上,推出了财务智能舱的产品,模块涉及到 数据采集(ETL);基本信息设置(元数据管理),主体分析(报表、OLAP)。叫嚣三年内淘汰传统财务软件。
BI动态
从全球范围来看,IDC预测,从现在到2005年,这个市场将以27%的年平均增长率发展,届时将会达到118亿美元。
全球BI工业的发展日益显示出集中的特征,市场集中度和全球化程度不断提高,少数几家BI公司掌握了越来越多国家的市场份额。2003年,世界前3大BI企业已控制了世界BI市场的30%以上的份额。
目前的中国BI市场呈现出以下特征:
1、中国的BI市场从开始就经历了一个激烈竞争的时期,高端市场被国际大厂商所占据,低端市场是国内的BI厂商及行业的ISV及集成商在竞争。
中国的BI市场不同与世界市场,目前市场没有一个真正的领先者,就如同ERP、CRM市场一样,最大市场份额是国外的管理软件厂商。但是,未来中国的BI市场可能在低端市场出现象用友、金蝶在财务套装软件那样的格局,几个大的国内BI厂商,凭借本地化和销售网络占据市场40%以上的市场份额。而在大的行业市场里,BI将会与解决方案融合在一起,市场被行业的ISV所把持。
2、未来的BI市场将快速发展,同时BI技术也将和CRM、ERP等技术融合。
ERP与BI的融合
未来ERP厂商将会把商业智能嵌入到相应的ERP系统内,一些领先的ERP供应商逐渐把商业智能工具转移到分析应用软件上。
CRM与BI的融合
由对于CRM的行业应用不断深入发展,商业智能(BI)将基于CRM系统以及企业其它应用系统,甚至手工积累的数据或者数据集,从企业决策分析的角度拓展出更大的发展空间。 无论是集成的BI软件还是自己的统计分析工具,CRM系统必然要强调对数据和过程数据的预测和分析,这样才能真正做到科学管理、精细型管理和过程管理。基于CRM的BI,就是企业在CRM流程中对数据的统计分析,只不过其指导思想和商业模型更加CRM化,更加体现以客户为中心的营销战略。
据IDC数据调查,2003年中国大陆BI市场软件授权费用总量为2300万美元,2004年预估将达3000万美元,增幅达30%。这也导致了大量国际大厂加快进军中国市场的步伐。2004年之前,国际主流的BI厂商也只有Brio一家亲自做中国市场,这也就是为什么BO在全球销售额是Brio的6倍,但在国内却只有其一半。不过,今后Brio在国内将不再孤独了。从1月1日起,国内原BO与Crystal销售人员将会以统一的形象面对客户,并将在3月份举办新公司最大一次亚太区用户大会。在合作伙伴的选择上,BO也取消了原先的全国总代理制,与原总代Business intelligence中国有限公司解除了合约,改为多代理商制,其中便包括实力强大的神州数码。
在收购Brio之前,Hyperion全球的销售收入中BI与BPM各占一半,收购后BI产品收入则占到60%。在国内,Brio现有销售队伍与Hyperion自有BI产品的队伍进行了整合,而Hyperion最有名的BPM产品则继续由原Hyperion的人员进行销售。对于2004年的市场预期,Hyperion中国公司的目标是:中国前100强企业中15~20%的客户采用Hyperion全套产品,包括后端的BPM与前端的BI(全套产品的意思是包括财务合并、财务分析、模型、从制订战略到商业模型与流程设计到预测)。
早在2003年初,Brio便与金蝶达成战略合作伙伴关系,金蝶作为Brio的顶级代理商, 把Brio Performance Suite捆绑到金蝶的企业信息化整体解决方案中。在合作近1年后,金蝶通过OEM方式推出了自己的EPM产品,虽然目前仅仅是雏形,还有很多没有成型,但也足以表明金蝶对这块市场的重视程度。
Cognos并没有亲自进入中国大陆市场,仅由国家信息中心的北京优信佳公司作为其总代理。
另一家主流的BI厂商,MicroStrategy也在2003年11月6日宣布,将通过其在大中国区的惟一总代理FirstBI公司代理销售其软件和服务,推广它的中文版产品,向中国企业提供数据分析软件,用以优化业务运作、提高效率和改善客户关系。而FirstBI的之前正是BO公司的中国区总代理。
内容与技术
数据挖掘研究内容和本质
随着DMKD研究逐步走向深入,数据挖掘和知识发现的研究已经形成了三根强大的技术支柱:数据库、人工智能和数理统计。因此,KDD大会程序委员会曾经由这三个学科的权威人物同时来任主席。目前DMKD的主要研究内容包括基础理论、发现算法、数据仓库、可视化技术、定性定量互换模型、知识表示方法、发现知识的维护和再利用、半结构化和非结构化数据中的知识发现以及网上数据挖掘等。
数据挖掘所发现的知识最常见的有以下四类:
- 广义知识(Generalization)
广义知识指类别特征的概括性描述知识。根据数据的微观特性发现其表征的、带有普遍性的、较高层次概念的、中观和宏观的知识,反映同类事物共同性质,是对数据的概括、精炼和抽象。
广义知识的发现方法和实现技术有很多,如数据立方体、面向属性的归约等。数据立方体还有其他一些别名,如“多维数据库”、“实现视图”、“OLAP"等。该方法的基本思想是实现某些常用的代价较高的聚集函数的计算,诸如计数、求和、平均、最大值等,并将这些实现视图储存在多维数据库中。既然很多聚集函数需经常重复计算,那么在多维数据立方体中存放预先计算好的结果将能保证快速响应,并可灵活地提供不同角度和不同抽象层次上的数据视图。另一种广义知识发现方法是加拿大SimonFraser大学提出的面向属性的归约方法。这种方法以类SQL语言表示数据挖掘查询,收集数据库中的相关数据集,然后在相关数据集上应用一系列数据推广技术进行数据推广,包括属性删除、概念树提升、属性阈值控制、计数及其他聚集函数传播等。
- 关联知识(Association)
它反映一个事件和其他事件之间依赖或关联的知识。如果两项或多项属性之间存在关联,那么其中一项的属性值就可以依据其他属性值进行预测。最为著名的关联规则发现方法是R.Agrawal提出的Apriori算法。关联规则的发现可分为两步。第一步是迭代识别所有的频繁项目集,要求频繁项目集的支持率不低于用户设定的最低值;第二步是从频繁项目集中构造可信度不低于用户设定的最低值的规则。识别或发现所有频繁项目集是关联规则发现算法的核心,也是计算量最大的部分。
- 分类知识(Classification&Clustering)
它反映同类事物共同性质的特征型知识和不同事物之间的差异型特征知识。最为典型的分类方法是基于决策树的分类方法。它是从实例集中构造决策树,是一种有指导的学习方法。该方法先根据训练子集(又称为窗口)形成决策树。如果该树不能对所有对象给出正确的分类,那么选择一些例外加入到窗口中,重复该过程一直到形成正确的决策集。最终结果是一棵树,其叶结点是类名,中间结点是带有分枝的属性,该分枝对应该属性的某一可能值。最为典型的决策树学习系统是ID3,它采用自顶向下不回溯策略,能保证找到一个简单的树。算法C4.5和C5.0都是ID3的扩展,它们将分类领域从类别属性扩展到数值型属性。
数据分类还有统计、粗糙集(RoughSet)等方法。线性回归和线性辨别分析是典型的统计模型。为降低决策树生成代价,人们还提出了一种区间分类器。最近也有人研究使用神经网络方法在数据库中进行分类和规则提取。
- 预测型知识(Prediction)
它根据时间序列型数据,由历史的和当前的数据去推测未来的数据,也可以认为是以时间为关键属性的关联知识。
目前,时间序列预测方法有经典的统计方法、神经网络和机器学习等。1968年Box和Jenkins提出了一套比较完善的时间序列建模理论和分析方法,这些经典的数学方法通过建立随机模型,如自回归模型、自回归滑动平均模型、求和自回归滑动平均模型和季节调整模型等,进行时间序列的预测。由于大量的时间序列是非平稳的,其特征参数和数据分布随着时间的推移而发生变化。因此,仅仅通过对某段历史数据的训练,建立单一的神经网络预测模型,还无法完成准确的预测任务。为此,人们提出了基于统计学和基于精确性的再训练方法,当发现现存预测模型不再适用于当前数据时,对模型重新训练,获得新的权重参数,建立新的模型。也有许多系统借助并行算法的计算优势进行时间序列预测。
- 偏差型知识(Deviation)
此外,还可以发现其他类型的知识,如偏差型知识(Deviation),它是对差异和极端特例的描述,揭示事物偏离常规的异常现象,如标准类外的特例,数据聚类外的离群值等。所有这些知识都可以在不同的概念层次上被发现,并随着概念层次的提升,从微观到中观、到宏观,以满足不同用户不同层次决策的需要。
数据挖掘的功能
数据挖掘通过预测未来趋势及行为,做出前摄的、基于知识的决策。数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下五类功能。
- 自动预测趋势和行为
数据挖掘自动在大型数据库中寻找预测性信息,以往需要进行大量手工分析的问题如今可以迅速直接由数据本身得出结论。一个典型的例子是市场预测问题,数据挖掘使用过去有关促销的数据来寻找未来投资中回报最大的用户,其它可预测的问题包括预报破产以及认定对指定事件最可能作出反应的群体。
- 关联分析
数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据库中隐藏的关联网。有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度。
- 聚类
数据库中的记录可被化分为一系列有意义的子集,即聚类。聚类增强了人们对客观现实的认识,是概念描述和偏差分析的先决条件。聚类技术主要包括传统的模式识别方法和数学分类学。80年代初,Mchalski提出了概念聚类技术牞其要点是,在划分对象时不仅考虑对象之间的距离,还要求划分出的类具有某种内涵描述,从而避免了传统技术的某些片面性。
- 概念描述
概念描述就是对某类对象的内涵进行描述,并概括这类对象的有关特征。概念描述分为特征性描述和区别性描述,前者描述某类对象的共同特征,后者描述不同类对象之间的区别。生成一个类的特征性描述只涉及该类对象中所有对象的共性。生成区别性描述的方法很多,如决策树方法、遗传算法等。
- 偏差检测
数据库中的数据常有一些异常记录,从数据库中检测这些偏差很有意义。偏差包括很多潜在的知识,如分类中的反常实例、不满足规则的特例、观测结果与模型预测值的偏差、量值随时间的变化等。偏差检测的基本方法是,寻找观测结果与参照值之间有意义的差别。
数据挖掘常用技术
- 人工神经网络
仿照生理神经网络结构的非线形预测模型,通过学习进行模式识别。
- 决策树
代表着决策集的树形结构。
- 遗传算法
基于进化理论,并采用遗传结合、遗传变异、以及自然选择等设计方法的优化技术。
- 近邻算法
将数据集合中每一个记录进行分类的方法。
- 规则推导
从统计意义上对数据中的“如果-那么”规则进行寻找和推导。
采用上述技术的某些专门的分析工具已经发展了大约十年的历史,不过这些工具所面对的数据量通常较小。而现在这些技术已经被直接集成到许多大型的工业标准的数据仓库和联机分析系统中去了。
摘自《数据挖掘讨论组》
关闭窗口
数据挖掘研究内容和本质
随着DMKD研究逐步走向深入,数据挖掘和知识发现的研究已经形成了三根强大的技术支柱:数据库、人工智能和数理统计。因此,KDD大会程序委员会曾经由这三个学科的权威人物同时来任主席。目前DMKD的主要研究内容包括基础理论、发现算法、数据仓库、可视化技术、定性定量互换模型、知识表示方法、发现知识的维护和再利用、半结构化和非结构化数据中的知识发现以及网上数据挖掘等。
数据挖掘所发现的知识最常见的有以下四类:
- 广义知识(Generalization)
广义知识指类别特征的概括性描述知识。根据数据的微观特性发现其表征的、带有普遍性的、较高层次概念的、中观和宏观的知识,反映同类事物共同性质,是对数据的概括、精炼和抽象。
广义知识的发现方法和实现技术有很多,如数据立方体、面向属性的归约等。数据立方体还有其他一些别名,如“多维数据库”、“实现视图”、“OLAP"等。该方法的基本思想是实现某些常用的代价较高的聚集函数的计算,诸如计数、求和、平均、最大值等,并将这些实现视图储存在多维数据库中。既然很多聚集函数需经常重复计算,那么在多维数据立方体中存放预先计算好的结果将能保证快速响应,并可灵活地提供不同角度和不同抽象层次上的数据视图。另一种广义知识发现方法是加拿大SimonFraser大学提出的面向属性的归约方法。这种方法以类SQL语言表示数据挖掘查询,收集数据库中的相关数据集,然后在相关数据集上应用一系列数据推广技术进行数据推广,包括属性删除、概念树提升、属性阈值控制、计数及其他聚集函数传播等。
- 关联知识(Association)
它反映一个事件和其他事件之间依赖或关联的知识。如果两项或多项属性之间存在关联,那么其中一项的属性值就可以依据其他属性值进行预测。最为著名的关联规则发现方法是R.Agrawal提出的Apriori算法。关联规则的发现可分为两步。第一步是迭代识别所有的频繁项目集,要求频繁项目集的支持率不低于用户设定的最低值;第二步是从频繁项目集中构造可信度不低于用户设定的最低值的规则。识别或发现所有频繁项目集是关联规则发现算法的核心,也是计算量最大的部分。
- 分类知识(Classification&Clustering)
它反映同类事物共同性质的特征型知识和不同事物之间的差异型特征知识。最为典型的分类方法是基于决策树的分类方法。它是从实例集中构造决策树,是一种有指导的学习方法。该方法先根据训练子集(又称为窗口)形成决策树。如果该树不能对所有对象给出正确的分类,那么选择一些例外加入到窗口中,重复该过程一直到形成正确的决策集。最终结果是一棵树,其叶结点是类名,中间结点是带有分枝的属性,该分枝对应该属性的某一可能值。最为典型的决策树学习系统是ID3,它采用自顶向下不回溯策略,能保证找到一个简单的树。算法C4.5和C5.0都是ID3的扩展,它们将分类领域从类别属性扩展到数值型属性。
数据分类还有统计、粗糙集(RoughSet)等方法。线性回归和线性辨别分析是典型的统计模型。为降低决策树生成代价,人们还提出了一种区间分类器。最近也有人研究使用神经网络方法在数据库中进行分类和规则提取。
- 预测型知识(Prediction)
它根据时间序列型数据,由历史的和当前的数据去推测未来的数据,也可以认为是以时间为关键属性的关联知识。
目前,时间序列预测方法有经典的统计方法、神经网络和机器学习等。1968年Box和Jenkins提出了一套比较完善的时间序列建模理论和分析方法,这些经典的数学方法通过建立随机模型,如自回归模型、自回归滑动平均模型、求和自回归滑动平均模型和季节调整模型等,进行时间序列的预测。由于大量的时间序列是非平稳的,其特征参数和数据分布随着时间的推移而发生变化。因此,仅仅通过对某段历史数据的训练,建立单一的神经网络预测模型,还无法完成准确的预测任务。为此,人们提出了基于统计学和基于精确性的再训练方法,当发现现存预测模型不再适用于当前数据时,对模型重新训练,获得新的权重参数,建立新的模型。也有许多系统借助并行算法的计算优势进行时间序列预测。
- 偏差型知识(Deviation)
此外,还可以发现其他类型的知识,如偏差型知识(Deviation),它是对差异和极端特例的描述,揭示事物偏离常规的异常现象,如标准类外的特例,数据聚类外的离群值等。所有这些知识都可以在不同的概念层次上被发现,并随着概念层次的提升,从微观到中观、到宏观,以满足不同用户不同层次决策的需要。
数据挖掘的功能
数据挖掘通过预测未来趋势及行为,做出前摄的、基于知识的决策。数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下五类功能。
- 自动预测趋势和行为
数据挖掘自动在大型数据库中寻找预测性信息,以往需要进行大量手工分析的问题如今可以迅速直接由数据本身得出结论。一个典型的例子是市场预测问题,数据挖掘使用过去有关促销的数据来寻找未来投资中回报最大的用户,其它可预测的问题包括预报破产以及认定对指定事件最可能作出反应的群体。
- 关联分析
数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据库中隐藏的关联网。有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度。
- 聚类
数据库中的记录可被化分为一系列有意义的子集,即聚类。聚类增强了人们对客观现实的认识,是概念描述和偏差分析的先决条件。聚类技术主要包括传统的模式识别方法和数学分类学。80年代初,Mchalski提出了概念聚类技术牞其要点是,在划分对象时不仅考虑对象之间的距离,还要求划分出的类具有某种内涵描述,从而避免了传统技术的某些片面性。
- 概念描述
概念描述就是对某类对象的内涵进行描述,并概括这类对象的有关特征。概念描述分为特征性描述和区别性描述,前者描述某类对象的共同特征,后者描述不同类对象之间的区别。生成一个类的特征性描述只涉及该类对象中所有对象的共性。生成区别性描述的方法很多,如决策树方法、遗传算法等。
- 偏差检测
数据库中的数据常有一些异常记录,从数据库中检测这些偏差很有意义。偏差包括很多潜在的知识,如分类中的反常实例、不满足规则的特例、观测结果与模型预测值的偏差、量值随时间的变化等。偏差检测的基本方法是,寻找观测结果与参照值之间有意义的差别。
数据挖掘常用技术
- 人工神经网络
仿照生理神经网络结构的非线形预测模型,通过学习进行模式识别。
- 决策树
代表着决策集的树形结构。
- 遗传算法
基于进化理论,并采用遗传结合、遗传变异、以及自然选择等设计方法的优化技术。
- 近邻算法
将数据集合中每一个记录进行分类的方法。
- 规则推导
从统计意义上对数据中的“如果-那么”规则进行寻找和推导。
采用上述技术的某些专门的分析工具已经发展了大约十年的历史,不过这些工具所面对的数据量通常较小。而现在这些技术已经被直接集成到许多大型的工业标准的数据仓库和联机分析系统中去了。
摘自《数据挖掘讨论组》
关闭窗口
数据挖掘分类器在保险业务中的应用
[
2006/03/10 02:23 | by fubin ]
2006/03/10 02:23 | by fubin ]
分类器在保险业务中的应用
田金兰 李 奔
保险是一项风险业务,保险公司的一个重要工作就是进行风险评估,风险评估对保险公司的正常运作至关重要,保费和保单的设计都需要进行比较详细的风险分析。在利用数据挖掘工具进行风险分析时,通常可以利用决策树的方法,在保险公司建立的保单及索赔信息数据库的基础上寻找保单中风险较大的领域,从而得出一些实用的控制风险的规则,指导保险公司的工作。
保险公司的投资组合数据库包含用户购买的保单集合。保单用来确保一个标定物的价值不会失去。当标定物遭到损失或丢失时,要根据保单进行索赔。一个保单在一定的时间内有效,其有效时间被称为风险期。在任一时间,投资组合数据库中的保单所承担的风险都是不同的。
保险公司成功的一个关键因素是在设置具有竞争力的保费和覆盖风险之间选择一种平衡。保险市场竞争激烈,设置过高的保费意味着会失去市场,而保费过低又会影响公司的赢利。保费通常是通过对一些主要的因素(如人寿保险中投保人的身体健康状况、汽车保险中车辆的类型等),进行多种分析和经验判断来确定。由于投资组合的数量很大,分析方法常常是粗略的。而数据挖掘提供了进行保险投资组合数据库分析的环境。
一、构造决策树
决策树方法起源于概念学习系统(CLS:Concept Learning System),然后发展了ID3 方法并达到高峰,最后又演化为能处理连续属性的C4.5。有名的决策树方法还有CART 和Assistant。
决策树构造的输入是一组带有类别标记的数据,构造的结果是一棵二叉或多叉树。二叉树的内部节点(非叶子节点)一般表示为一个逻辑判断,如形式为(ai = vi ) 的逻辑判断,其中ai 是属性,vi 是该属性的某个属性值;树的边是逻辑判断的分支结果。多叉树(ID3)的内部节点是属性,边是该属性的所有取值,有几个属性值,就有几条边。树的叶子节点都是类别标记。
构造决策树的方法是采用自上而下的递归构造。以多叉树为例,它的构造思路是:如果训练数据集合中的所有数据是同类的,则将之作为叶子节点,节点内容即是该类别标记,否则,根据某种策略选择一个属性;按照属性的各个取值,把数据集合划分为若干子集合,使得每个子集上的所有数据在该属性上具有同样的属性值;然后再依次递归处理各个子集。这种思路实际上就是“分而治之”(Divide -and -conquer)的道理。二叉树的原理与此类的差别仅在于要选择一个好的逻辑判断。
为进行风险分析,选取索赔金额作为目标属性,其他属性作为独立变量。所有保单被划分为两类,即有索赔的和无索赔的,将索赔金额转换为“是否索赔”(值为1 或0),而后利用数据集合来生成一个完整的决策树。在生成的决策树中可以建立一个规则基。一个规则基包含一组规则,每一条规则对应决策树的一条不同路径,这条路径代表它经过节点所表示的条件的一条连接。
二、决策树分类器在保险业务中的应用
SGI 公司的数据挖掘工具MineSet 中提供了决策树分类器和选择树分类器,进行数据挖掘工作。下面我们介绍如何用MineSet 工具的分类器对某市的医疗保险数据进行数据挖掘。
该医疗保险数据库由个人信息表、单位信息表、一定时间段( 月) 内索赔单据表等数据表组成。各表信息如表1 ~3 所示。
数据挖掘工作包括下面几个步骤:
1 .数据整理
选用的医疗保险数据是由社会保障部门提供的原始数据。通常来说,MineSet 不方便对这样的数据直接进行处理。在进行数据挖掘工作之前,需要进行前期的数据整理工作,比如根据直观经验去除数据中的冗余信息,像个人姓名、单位名称、投保日期等;统计一定时间段内个人进行医疗保险索赔的次数(因为个人是否索赔是我们最关心的信息)。
具体而言,在个人信息表的基础上,根据单位编号检索单位编号表,获取该投保人的单位信息;根据个人保险号检索某月索赔单据表,累计该投保人索赔次数。经过数据整理工作,得到一张描述该月内个人索赔信息的数据表格,如表4 所示。
2 .数据分析
在MineSet 中,给出一个数据集中的一些属性,分类器可以预测出某一个特定的属性。
把被预测的属性叫做标签(Label),用于预测的其他属性叫做描述性属性(Descriptive attributes)。MineSet 可以从一个训练集中自动地生成分类器。这个训练集由数据库中在给定描述性属性的基础上标签已经被给定的记录集组成。在生成分类器后,可以利用它来对数据集中不包含标签属性的记录进行分类。标签的值可以用分类器来预测。
在分析保险业务时,投保人是否索赔是我们最关心的信息。对于上面的数据集,我们把属性“是否索赔”作为标签属性。其他信息如个人保险号、单位名称等根据经验判断属于不相关信息,可以在开始正式数据挖掘工作时去除;“是否索赔”属性是直接根据“索赔次数”属性得出的,因此“索赔次数”属性和“是否索赔”属性有一定的重复性,在这个比较简单的应用中也可以去除。这样,这个应用中的描述性属性包括“年龄”、“全年工资总额”、“单位性质”、“地区编号”四个字段。该月索赔信息的整个数据集作为训练集。
3 .数据挖掘
首先应用MineSet 的“列重要性”数据挖掘方法得出描述性属性中对标签属性的影响程度最大的列,从而避免经验判断的主观性。“列重要性”给出的结果是描述性属性中对标签属性影响最大的三个属性,在上述表中是“年龄”、“全年工资总额”、“单位性质”三个字段。
选择“决策树”数据挖掘方法,选定“Classifer and Error"(分类及错误率评估)模式,并对交叉纠错方法涉及到的一些参数进行设置后,运行程序,就可以得到有关该保险数据集的一棵决策树, 如图1 所示。
4 .挖掘结果分析理解
MineSet 给出的是一棵在各节点分别根据描述性属性做决策的二叉树。将鼠标移到节点上,图上部的文本框将给出该节点的详细信息。连接各节点的连线上标明决策条件。在根节点,可以从屏幕上看到,训练集记录总数为6401,其中不索赔人数为5377,所占百分比为84.00 %;索赔人数为1024,所占百分比为16.00 %。
决策树给出的第一个选择条件为年龄。这是我们根据经验常识也可能得出的结论,即年龄大的人可能身体要差一些。但是具体到多大岁数算“年龄大”,我们很难给出准确的数字化的结论。MineSet 工具利用统计学方法,可以对这些问题进行量化。在本例中,我们可以看到,56 岁是一个分界线。年龄小于56 岁的,在根节点的左分支,总人数为4140,其中不索赔人数为3742,占90.39 %;索赔人数为398,占9.61 %。而在右分支,年龄在56 岁以上的,总人数为2261,其中索赔人数为626,占27.69 %,所占百分比例显著上升。
本应用中的决策树给出了年龄在56 岁以上的投保人数据的详细分析情况,因为在这批数据中,我们所关心的索赔问题出现的概率更大;如果对年龄在56 岁以下投保人数据感兴趣,则可以利用MineSet 提供的数据过滤功能,以(年龄<56)作为过滤条件,得出需要的训练集,在该训练集上应用决策树挖掘方法,生成需要的决策树图。
在根节点的右子树中,我们可以看出索赔情况的其他一些规律。比如,下一个分支条件为“全年工资总额”。可以想像,年收入高的投保人可能更有条件在健身、保健等方面投资,而年收入相对低的投保人可能对保健考虑得少一些,所以年收入的高低对医疗保险的索赔情况产生较大的影响是可信的。
再如,“单位类别”也是右子树中的分支条件,在其他条件相同的情况下,单位类别为企业单位的投保人索赔可能性远远低于单位类别为事业单位的投保人,结合我国医疗保险实施的具体情况,我们可以给出这样的解释:该市医疗费用的支付方法与投保人单位类别有关;企业单位投保人负担医疗费用中的较大部分,保险部门负担较小的部分;而事业单位投保人所要负担的费用占总医疗费用的比例要低得多,保险部门负责支付较大部分。在实际情况中,企业单位的投保人考虑到需要自己支付较多的费用,很多可看可不看的病很可能就不上医院了。
根据决策树和投保人的详细信息,我们可以预测出在将来的一段时间内索赔概率的大小,并根据索赔可能性大小相应地调整某类投保人保单的费用标准。比如,一个年龄为58 岁,在企业单位工作、全年工资总额为1.2 万元的投保人,在二叉树中依次沿各分支走下去,我们可以预测他索赔的概率为9.84 %,相对而言较小,可以考虑降低这一类投保人的保单费用。而一个年龄为59 岁,在事业单位工作,全年工资总额为9500 元的投保人,根据决策树预测索赔概率为37.56 %,大大高于训练集中的平均索赔概率,则可以考虑适当提高这类投保人的保单费用。
三、选择树分类器在保险业务中的应用
选择MineSet 的“选择树”数据挖掘方法,选定“Classifer and Error"模式,并对一些参数进行设置后,运行程序,我们可以得到有关该保险数据集的一棵选择树,如图2 所示。
选择树图的基本原理和分析方法与决策树图是相同的,只是选择树图提供了更多的选择分支。比如在本例中,从选择树图的根节点出发可以选择“年龄”、“全年工资总额”、“单位类别”、“地区编号”等四个不同的分支;如果我们在医疗保险领域拥有丰富的经验,则可以根据自己的经验选择不同的分支,而不像决策树图中那样只能被动地根据决策树图给出的判断条件在二叉树中进行检索。
虽然生成选择树的代价比决策树要大(运算量大,时间更长)。但选择树有两个显著的优点:
1、可理解性更强。选择节点提供了几种可能的选择。当你在树中浏览时,你可以选择你认为最容易理解的或在具备一定的背景知识的基础上确认更利于作出预测的分支。
2、更高的准确性。在很多情况中,选择树比决策树更准确(更低的错误率),就像在股票投资中分散投资以降低风险一样,综合使用多项选择通常可以作出更稳定、风险更小的分类预测。
田金兰 李 奔
保险是一项风险业务,保险公司的一个重要工作就是进行风险评估,风险评估对保险公司的正常运作至关重要,保费和保单的设计都需要进行比较详细的风险分析。在利用数据挖掘工具进行风险分析时,通常可以利用决策树的方法,在保险公司建立的保单及索赔信息数据库的基础上寻找保单中风险较大的领域,从而得出一些实用的控制风险的规则,指导保险公司的工作。
保险公司的投资组合数据库包含用户购买的保单集合。保单用来确保一个标定物的价值不会失去。当标定物遭到损失或丢失时,要根据保单进行索赔。一个保单在一定的时间内有效,其有效时间被称为风险期。在任一时间,投资组合数据库中的保单所承担的风险都是不同的。
保险公司成功的一个关键因素是在设置具有竞争力的保费和覆盖风险之间选择一种平衡。保险市场竞争激烈,设置过高的保费意味着会失去市场,而保费过低又会影响公司的赢利。保费通常是通过对一些主要的因素(如人寿保险中投保人的身体健康状况、汽车保险中车辆的类型等),进行多种分析和经验判断来确定。由于投资组合的数量很大,分析方法常常是粗略的。而数据挖掘提供了进行保险投资组合数据库分析的环境。
一、构造决策树
决策树方法起源于概念学习系统(CLS:Concept Learning System),然后发展了ID3 方法并达到高峰,最后又演化为能处理连续属性的C4.5。有名的决策树方法还有CART 和Assistant。
决策树构造的输入是一组带有类别标记的数据,构造的结果是一棵二叉或多叉树。二叉树的内部节点(非叶子节点)一般表示为一个逻辑判断,如形式为(ai = vi ) 的逻辑判断,其中ai 是属性,vi 是该属性的某个属性值;树的边是逻辑判断的分支结果。多叉树(ID3)的内部节点是属性,边是该属性的所有取值,有几个属性值,就有几条边。树的叶子节点都是类别标记。
构造决策树的方法是采用自上而下的递归构造。以多叉树为例,它的构造思路是:如果训练数据集合中的所有数据是同类的,则将之作为叶子节点,节点内容即是该类别标记,否则,根据某种策略选择一个属性;按照属性的各个取值,把数据集合划分为若干子集合,使得每个子集上的所有数据在该属性上具有同样的属性值;然后再依次递归处理各个子集。这种思路实际上就是“分而治之”(Divide -and -conquer)的道理。二叉树的原理与此类的差别仅在于要选择一个好的逻辑判断。
为进行风险分析,选取索赔金额作为目标属性,其他属性作为独立变量。所有保单被划分为两类,即有索赔的和无索赔的,将索赔金额转换为“是否索赔”(值为1 或0),而后利用数据集合来生成一个完整的决策树。在生成的决策树中可以建立一个规则基。一个规则基包含一组规则,每一条规则对应决策树的一条不同路径,这条路径代表它经过节点所表示的条件的一条连接。
二、决策树分类器在保险业务中的应用
SGI 公司的数据挖掘工具MineSet 中提供了决策树分类器和选择树分类器,进行数据挖掘工作。下面我们介绍如何用MineSet 工具的分类器对某市的医疗保险数据进行数据挖掘。
该医疗保险数据库由个人信息表、单位信息表、一定时间段( 月) 内索赔单据表等数据表组成。各表信息如表1 ~3 所示。
数据挖掘工作包括下面几个步骤:
1 .数据整理
选用的医疗保险数据是由社会保障部门提供的原始数据。通常来说,MineSet 不方便对这样的数据直接进行处理。在进行数据挖掘工作之前,需要进行前期的数据整理工作,比如根据直观经验去除数据中的冗余信息,像个人姓名、单位名称、投保日期等;统计一定时间段内个人进行医疗保险索赔的次数(因为个人是否索赔是我们最关心的信息)。
具体而言,在个人信息表的基础上,根据单位编号检索单位编号表,获取该投保人的单位信息;根据个人保险号检索某月索赔单据表,累计该投保人索赔次数。经过数据整理工作,得到一张描述该月内个人索赔信息的数据表格,如表4 所示。
2 .数据分析
在MineSet 中,给出一个数据集中的一些属性,分类器可以预测出某一个特定的属性。
把被预测的属性叫做标签(Label),用于预测的其他属性叫做描述性属性(Descriptive attributes)。MineSet 可以从一个训练集中自动地生成分类器。这个训练集由数据库中在给定描述性属性的基础上标签已经被给定的记录集组成。在生成分类器后,可以利用它来对数据集中不包含标签属性的记录进行分类。标签的值可以用分类器来预测。
在分析保险业务时,投保人是否索赔是我们最关心的信息。对于上面的数据集,我们把属性“是否索赔”作为标签属性。其他信息如个人保险号、单位名称等根据经验判断属于不相关信息,可以在开始正式数据挖掘工作时去除;“是否索赔”属性是直接根据“索赔次数”属性得出的,因此“索赔次数”属性和“是否索赔”属性有一定的重复性,在这个比较简单的应用中也可以去除。这样,这个应用中的描述性属性包括“年龄”、“全年工资总额”、“单位性质”、“地区编号”四个字段。该月索赔信息的整个数据集作为训练集。
3 .数据挖掘
首先应用MineSet 的“列重要性”数据挖掘方法得出描述性属性中对标签属性的影响程度最大的列,从而避免经验判断的主观性。“列重要性”给出的结果是描述性属性中对标签属性影响最大的三个属性,在上述表中是“年龄”、“全年工资总额”、“单位性质”三个字段。
选择“决策树”数据挖掘方法,选定“Classifer and Error"(分类及错误率评估)模式,并对交叉纠错方法涉及到的一些参数进行设置后,运行程序,就可以得到有关该保险数据集的一棵决策树, 如图1 所示。
4 .挖掘结果分析理解
MineSet 给出的是一棵在各节点分别根据描述性属性做决策的二叉树。将鼠标移到节点上,图上部的文本框将给出该节点的详细信息。连接各节点的连线上标明决策条件。在根节点,可以从屏幕上看到,训练集记录总数为6401,其中不索赔人数为5377,所占百分比为84.00 %;索赔人数为1024,所占百分比为16.00 %。
决策树给出的第一个选择条件为年龄。这是我们根据经验常识也可能得出的结论,即年龄大的人可能身体要差一些。但是具体到多大岁数算“年龄大”,我们很难给出准确的数字化的结论。MineSet 工具利用统计学方法,可以对这些问题进行量化。在本例中,我们可以看到,56 岁是一个分界线。年龄小于56 岁的,在根节点的左分支,总人数为4140,其中不索赔人数为3742,占90.39 %;索赔人数为398,占9.61 %。而在右分支,年龄在56 岁以上的,总人数为2261,其中索赔人数为626,占27.69 %,所占百分比例显著上升。
本应用中的决策树给出了年龄在56 岁以上的投保人数据的详细分析情况,因为在这批数据中,我们所关心的索赔问题出现的概率更大;如果对年龄在56 岁以下投保人数据感兴趣,则可以利用MineSet 提供的数据过滤功能,以(年龄<56)作为过滤条件,得出需要的训练集,在该训练集上应用决策树挖掘方法,生成需要的决策树图。
在根节点的右子树中,我们可以看出索赔情况的其他一些规律。比如,下一个分支条件为“全年工资总额”。可以想像,年收入高的投保人可能更有条件在健身、保健等方面投资,而年收入相对低的投保人可能对保健考虑得少一些,所以年收入的高低对医疗保险的索赔情况产生较大的影响是可信的。
再如,“单位类别”也是右子树中的分支条件,在其他条件相同的情况下,单位类别为企业单位的投保人索赔可能性远远低于单位类别为事业单位的投保人,结合我国医疗保险实施的具体情况,我们可以给出这样的解释:该市医疗费用的支付方法与投保人单位类别有关;企业单位投保人负担医疗费用中的较大部分,保险部门负担较小的部分;而事业单位投保人所要负担的费用占总医疗费用的比例要低得多,保险部门负责支付较大部分。在实际情况中,企业单位的投保人考虑到需要自己支付较多的费用,很多可看可不看的病很可能就不上医院了。
根据决策树和投保人的详细信息,我们可以预测出在将来的一段时间内索赔概率的大小,并根据索赔可能性大小相应地调整某类投保人保单的费用标准。比如,一个年龄为58 岁,在企业单位工作、全年工资总额为1.2 万元的投保人,在二叉树中依次沿各分支走下去,我们可以预测他索赔的概率为9.84 %,相对而言较小,可以考虑降低这一类投保人的保单费用。而一个年龄为59 岁,在事业单位工作,全年工资总额为9500 元的投保人,根据决策树预测索赔概率为37.56 %,大大高于训练集中的平均索赔概率,则可以考虑适当提高这类投保人的保单费用。
三、选择树分类器在保险业务中的应用
选择MineSet 的“选择树”数据挖掘方法,选定“Classifer and Error"模式,并对一些参数进行设置后,运行程序,我们可以得到有关该保险数据集的一棵选择树,如图2 所示。
选择树图的基本原理和分析方法与决策树图是相同的,只是选择树图提供了更多的选择分支。比如在本例中,从选择树图的根节点出发可以选择“年龄”、“全年工资总额”、“单位类别”、“地区编号”等四个不同的分支;如果我们在医疗保险领域拥有丰富的经验,则可以根据自己的经验选择不同的分支,而不像决策树图中那样只能被动地根据决策树图给出的判断条件在二叉树中进行检索。
虽然生成选择树的代价比决策树要大(运算量大,时间更长)。但选择树有两个显著的优点:
1、可理解性更强。选择节点提供了几种可能的选择。当你在树中浏览时,你可以选择你认为最容易理解的或在具备一定的背景知识的基础上确认更利于作出预测的分支。
2、更高的准确性。在很多情况中,选择树比决策树更准确(更低的错误率),就像在股票投资中分散投资以降低风险一样,综合使用多项选择通常可以作出更稳定、风险更小的分类预测。




2006/04/08 15:30 | by
下载文件