
Distr . 19 September 2003 Original : ENGLISH Opening address Ms. Heli Jeskanen-Sundström , Director General , Statistics Finland Construction of an information society is the strategic goal of many countries . The building of an information society is not a detached process , but is tied to other social policy . Social change - especially when it is rapid - presents constant new challenges to decision-makers . There is a need for knowledge about the present status quo and its background and for relevant , reliable facts about the development trends in society . Capacity for continuous renewal and ability to adapt to changing customer needs are the prerequisites for staying competitive in business . New capabilities and ways of acting are also demanded of members of society . It is no longer enough to view change from the national perspective ; the effects of globalisation extend to the public sector , business enterprises , non-governmental organisations and ordinary citizens in every country . Countries want to compare their own development with that of others and seek for best practices . In this work , official statistics play an important role . The Organisation for Economic Co-operation and Development ( OECD ) started systematic development of statistics on the information society in the 1990s , although the first pilot statistics on the phenomenon were already produced in the 1980s , that is , two decades ago . The development of statistics on the information society has progressed in steps - initially through clarification of concepts and definitions , then by exploitation of existing statistical data and eventually by designing statistics requiring new data collections . The OECD 's exhaustive publication Monitoring the Information Economy 2002 contains scores of quantitative indicators for the monitoring of the state of the information society in different countries . In Europe , the eEurope 2002 indicators of the Commission of the European Union are used to monitor the progress towards the information society in the Member States . Besides quantitative monitoring , qualitative measuring is also applied to the eEurope programme . Thus , examples of follow-up systems already exist for a world-wide monitoring mechanism . Many countries already produce regular statistics depicting the information society , but the capability to compile them varies considerably from country to country . Some international recommendations are already available on the instruments - framework , concepts , definitions and classifications - that are needed in the compilation of these statistics but work on then is not finalised . Experience has shown that the development of a new statistical system takes several years . As an example of this , the first draft of the Handbook of Environmental Accounting that has just been completed was produced as far back as the early 1990s . The Fundamental Principles of Official Statistics approved by the United Nation ( UN ) in 1994 offer a good foundation on which statistical organisations throughout the world can build their activity . These principles state as follows : “ Official statistics provide an indispensable element in the information system of a democratic society , serving the government , the economy and the public with data about the economic , demographic , social and environmental situation . To this end , official statistics that meet the test of practical utility are to be compiled and made available on an impartial basis by official statistical agencies to honour citizens ' entitlement to public information . ” The UN 's statement emphasises that official statistics must be compiled according to scientific methods and internationally recognised classifications and definitions . Protection of suppliers ' data must be unconditional . The statement further stresses the importance of co-ordination and co-operation . These fundamental principles of the UN are the preconditions without which production and functioning of official statistics cannot even be started . Statistics describing the information society must also be developed in compliance with these principles . In its Declaration of Principles document , the World Summit on the Information Society will most probably adopt the key principles relating to the establishment of a sustainable information society . These will form the cornerstones on which the Summit 's action plan and monitoring system will be built . The Declaration ( Draft , July 2003 ) sets out targets on the following areas : Information and communication infrastructure Access to information and knowledge The role of governments , the business sector and civil society in the promotion of ICTs for development Capacity building : human resources development , education and training Building confidence and security in the use of ICTs Enabling environment Promotion of development-oriented ICT-applications for all Cultural identity and linguistic diversity , local content and media development Ethical dimensions of the Information Society International and regional co-operation The declaration emphasises the need of an adequate information and communication ( IC ) infrastructure and the necessity to raise people 's skills and competence , opportunities for the exploitation of ICT applications in all areas of life , and support of cultural diversity and creativity . These goals also serve as pointers for the statistical system that is needed to monitor their achievement . The importance of education and competence cannot be emphasised enough when we speak about the development of the information society . From the perspective of a producer of official statistics it is satisfying to note that a Plan of Action , putting emphasis on the role of statistics in the monitoring process is also being drafted in support of the goals set in the declaration . Realisation of the goals of the information society will almost certainly be chiefly measured with qualitative instruments . Achievement of the targets relating to the legal environment or removal of constraints will probably be easiest to monitor with country-specific status reports and lists of actions . Monitoring of the attainment of the set goals also needs quantitative measures . Fortunately these do not have to be produced from scratch . International organisations already today produce a host of statistical information that can also be exploited for the monitoring of this declaration . The declaration concerning the development of the information society is not the first or only programme targeted at globally equitable human development . The UN 's Millennium Development Goals were adopted by the UN Millennium Summit held in 2000. Monitoring of the attainment of these goals has already started and several indicators used in it are also relevant for the monitoring of the declaration on the information society . International organisations should ensure that the indicators and statistics used in the monitoring of the other global programmes can also be exploited in the monitoring process that is about to be initiated now . The workload of national statistical offices should be minimised by maximising co-ordination between the statistical systems of international organisations . Systematic statistical monitoring requires organisation , co-ordination and division of responsibilities among international bodies . The system has to be efficient , and overlapping should be avoided . It would be prudent to draw up an inventory of the information international organisations already possess and of the recommendations that have been issued . For instance , the International Telecommunication Union ( ITU ) , the United Nations Educational , Scientific and Cultural Organization ( UNESCO ) , and the UN already collect statistical data that can be utilised . Successful selection of the essential ones , or so-called core indicators , of all the possible available measures is a major challenge to the monitoring of information society development . International organisations must also make sure that national statistical offices have at their disposal uniform and relevant concept definitions and other standards that support the compilation of statistics . Several examples of this already exist . Literacy of citizens is the decisive condition to the development of the information society . UNESCO conducts extensive collections of data on people 's educational levels and participation rates in education in different countries . The ITU , for its part , follows the development and penetration of the telecommunications infrastructure in many countries . Existing mass communication and cultural statistics can provide data on printed media , and on digital content production and use in different countries . Besides providing classifications and methodological recommendations , international organisations already also offer tangible data collection instruments for statistical offices . The UN and the OECD , for instance , have published recommendations on how the information sector should be defined . The OECD has also reached unanimity about the definition of electronic commerce . Model questionnaires have been developed and approved within the OECD for inquiry surveys measuring the use of information and communication technologies . The purpose of these recommendations is to support the work of national statistical offices and ensure the availability of internationally comparable data . Unfortunately , monitoring of the progress of the information society cannot be based on mere average figures for different countries . Besides producing data on literacy , diffusion of equipment stock or spread of Internet use , we should also know to what extent disparities in these occur between regions , or by socio-economic group or gender . Diverse national and international digital divide index calculation exercises have already been made . It is also necessary to monitor the impact of the taken measures on bridging this divide . There is also much international interest in statistics that can be utilised to analyse the coping of women and girls as exploiters of information technology . Over the past few years , the UN 's city group - the Voorburg Group - which focuses on the development of statistics on service industries has been giving consideration to the development of statistics depicting the information society . The members of the group , thus far mainly statistical offices of developed countries , have had the opportunity to exchange information about their experiences and about best practices . The UN 's Statistics Commission has discussed the establishment of a new forum for less developed countries . It might be defensible to suggest that while a monitoring system is being devised for the WSIS process , such a contact group be established within the framework of some subdivision of the UN . It would also be important to include the future users of the data in the development process at the international level . It is equally justified to wonder how international organisations could give assistance to less advanced countries in the development and compilation of basic statistics and indicators describing the information society . If support is given to the projects that are launched to implement the declaration , it would also be logical to support the development of the statistics that are needed in its monitoring . Commercial research institutes and private consulting companies produce a great deal of information about the penetration and use of information technology in different countries . The data are collected at the commission of customers who also pay for them , so demand for this kind of information quite obviously exists , and some of it is even available free of charge on the Internet . Why could the World Summit monitoring system not be based on this ? Use of statistics produced by commercial research institutes and consulting companies , as well as country-specific comparisons must be approached with certain reservations . The main concern relates to transparency of the used methods , which are often not publicly disclosed . Present research extends to a limited number of countries , mostly only those with the greatest economic influence . Data on developing countries are rarely available . The examined branches of industry or levels of education may deviate from those of official classifications , so the basic information otherwise available on them cannot be used . Commercial research institutes generally only produce information that sells , which is fairly understandable . However , there is no commercial demand for many measures , such as those concerning equality between regions and genders , that are vital in the monitoring of information society development . When the World Summit adopts the Plan of Action , it entails initiation of an implementation and monitoring activity that will span over several years at both national and international levels . The information society perspective will become integrated into national policies . It also implicates that statistical offices will become bound by and committed to the development of statistics that serve the monitoring . Official statistics are expected , first and foremost , to give an accurate account of what is going on in society . Statistical offices must be able to provide relevant , reliable and up-to-date numerical information and support to decision-makers . Fulfilling this task is a major challenge to statistical offices at a time when society keeps changing fast and their resources are quite limited . The best foundation for statistics on the information society is a good infrastructure of official statistics . New data can often be effectively produced by reclassifying the data from household inquiries or statistics on manufacturing or foreign trade , or by attaching supplementary questions to existing survey inquiries . The cost of developing a new statistical system can be minimised by the exploitation of existing systems . Statistical monitoring of the information society has to be adapted to the other work and operating frameworks of statistical offices . At its next meeting in two year 's time , the World Summit on the Information Society expects a follow-up report on the principles adopted at this meeting . This means that we have to be able to describe the present status quo and the development over the coming years . When new statistics are being developed it is good to bear in mind that the targets of statistical monitoring cannot change from one year to the next , but time series are needed . The development work takes several years and requires close co-operation with the suppliers and users of data . When national information society programmes are being drawn up it is good if statistical offices can contribute to the work right from the beginning . A programme for the monitoring of strategies and action plans is vital , how else could their compilers obtain follow-up data on the present development that are impartial and independent , and comply with the ethical rules of statistics and research . As an example from my own country , Finland , I can quote that , keen to monitor progress , the Finnish Government charged Statistics Finland , in its first national Information Society Strategy in 1995 , with the responsibility to provide reports at regular intervals and to conduct occasional studies on the programme 's impacts in society . Giving out a strategy means that we should be able to measure the development towards the given targets . Ever since then , Statistics Finland has participated closely in the national work on the development of the information society , and this work has also borne good fruit . Kofi Annan , Secretary-General of the United Nations , writes in the foreword of the UNCTAD E-Commerce and Development Report 2002 : “ If the world is serious about achieving the Millennium Development Goal of halving the number of people living in extreme poverty by the year 2015 , ICT must figure prominently in the effort . Everyone - governments , civil society , private sector businesses - has a vital stake in fostering digital opportunity and putting ICT at the service of development . ” Extensive adoption of ICT and raising of skills levels are global challenges of the information society . There are intermediate steps and clear milestones in the achievement of these targets . The WSIS requires monitoring of the key principles of the declaration . How capable is the international statistical community of responding to the challenge thrown at it ? How the task should be organised and the work of international organisations co-ordinated is a major challenge . Successful and relevant outlining of the frame of reference into which the indicators derived from the declaration can be placed is crucially important . Naturally , concepts and definitions need universal approval and introduction . All this must be well on the way by the Summit in Tunis in two years ' time . Producing globally exhaustive statistics on the development of society would be an ambitious goal even with a longer timetable than this . I believe , however , that national statistical offices are keen to take up the challenge , provided the procedures and guidelines are agreed upon . 